-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Lambdas #3848
base: trunk
Are you sure you want to change the base?
Lambdas #3848
Conversation
|
||
To understand how the syntax between lambdas and function declarations is | ||
reasonably "continuous", refer to this table of syntactic positions and the | ||
following code examples. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider presenting this information more like this, instead:
Function definitions have one of the following syntactic forms (where items in square brackets are optional and independent):
fn
[name] [ implicit-params ] [tuple-pattern]=>
expression;
fn
[name] [ implicit-params ] [tuple-pattern] [->
return-type]{
statements}
The first form is a shorthand for the second: "
=>
expression;
" is equivalent to "-> auto { return
expression; }
".implicit-params consists of square brackets enclosing an optional default capture mode and any number of explicit captures, function fields, and deduced parameters, all separated by commas. The default capture mode (if any) must come first; the other items can appear in any order. If implicit-params is omitted, it is equivalent to
[]
.The presence of name determines whether this is a function declaration or a lambda expression.
The presence of tuple-pattern determines whether the function body uses named or positional parameters.
The presence of "
->
return-type" determines whether the function body can (and must) return a value.
That's more abstract, but at least for me, it would make it much easier to see how this design is (and isn't) continuous.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome! I added this content right above the part that you highlighted. My reading of it is that these two blocks of text are not mutually exclusive. Do you disagree?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree they're not mutually exclusive. Personally I don't find the table and examples helpful, but they may work better for other people.
|
||
To understand how the syntax between lambdas and function declarations is | ||
reasonably "continuous", refer to this table of syntactic positions and the | ||
following code examples. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree they're not mutually exclusive. Personally I don't find the table and examples helpful, but they may work better for other people.
proposals/p3848.md
Outdated
**Proposal**: To mirror the behavior of init captures in C++, function fields | ||
will support nothing-implies-`let` and `var` binding patterns. These will be | ||
annotated with a type and initialized with the right-hand-side of an equals | ||
sign. The lifetime of a function field is the same as the lifetime of the | ||
function declaration or lambda in which it exists. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should specify this slightly differently:
**Proposal**: To mirror the behavior of init captures in C++, function fields | |
will support nothing-implies-`let` and `var` binding patterns. These will be | |
annotated with a type and initialized with the right-hand-side of an equals | |
sign. The lifetime of a function field is the same as the lifetime of the | |
function declaration or lambda in which it exists. | |
**Proposal**: Function fields mirror the behavior of init captures in C++. | |
A function field definition consists of an irrefutable pattern, `=`, and an initializer. | |
It matches the pattern with the initializer when the function definition is evaluated. | |
The bindings in the pattern have the same lifetime as the function, and their scope | |
extends to the end of the function body. |
This is more general than what we've discussed so far, because it allows things like fn [(a: auto, b: auto) = Foo()] {...}
, but that generalization seems desirable.
e119bcb
to
4b408a2
Compare
proposals/p3848.md
Outdated
Function definitions have one of the following syntactic forms (where items in | ||
square brackets are optional and independent): | ||
|
||
`fn` \[_name_\] \[_implicit-parameters_\] \[_tuple-pattern_\] `=>` _expression_ | ||
`;` | ||
|
||
`fn` \[_name_\] \[_implicit-parameters_\] \[_tuple-pattern_\] \[`->` | ||
_return-type_\] `{` _statements_ `}` | ||
|
||
The first form is a shorthand for the second: "`=>` _expression_ `;`" is | ||
equivalent to "`-> auto { return` _expression_ `; }`". | ||
|
||
_implicit-parameters_ consists of square brackets enclosing a optional default | ||
capture mode and any number of explicit captures, function fields, and deduced | ||
parameters, all separated by commas. The default capture mode (if any) must come | ||
first; the other items can appear in any order. If _implicit-parameters_ is | ||
omitted, it is equivalent to `[]`. | ||
|
||
The presence of _name_ determines whether this is a function declaration or a | ||
lambda expression. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we're missing a description of the behavior of the trailing ;
here. How about something like:
Function definitions have one of the following syntactic forms (where items in | |
square brackets are optional and independent): | |
`fn` \[_name_\] \[_implicit-parameters_\] \[_tuple-pattern_\] `=>` _expression_ | |
`;` | |
`fn` \[_name_\] \[_implicit-parameters_\] \[_tuple-pattern_\] \[`->` | |
_return-type_\] `{` _statements_ `}` | |
The first form is a shorthand for the second: "`=>` _expression_ `;`" is | |
equivalent to "`-> auto { return` _expression_ `; }`". | |
_implicit-parameters_ consists of square brackets enclosing a optional default | |
capture mode and any number of explicit captures, function fields, and deduced | |
parameters, all separated by commas. The default capture mode (if any) must come | |
first; the other items can appear in any order. If _implicit-parameters_ is | |
omitted, it is equivalent to `[]`. | |
The presence of _name_ determines whether this is a function declaration or a | |
lambda expression. | |
Function definitions and lambda expressions have one of the following syntactic forms (where items in | |
square brackets are optional and independent): | |
`fn` \[_name_\] \[_implicit-parameters_\] \[_tuple-pattern_\] `=>` _expression_ | |
\[`;`\] | |
`fn` \[_name_\] \[_implicit-parameters_\] \[_tuple-pattern_\] \[`->` | |
_return-type_\] `{` _statements_ `}` | |
The first form is a shorthand for the second: "`=>` _expression_ `;`" is | |
equivalent to "`-> auto { return` _expression_ `; }`". | |
_implicit-parameters_ consists of square brackets enclosing a optional default | |
capture mode and any number of explicit captures, function fields, and deduced | |
parameters, all separated by commas. The default capture mode (if any) must come | |
first; the other items can appear in any order. If _implicit-parameters_ is | |
omitted, it is equivalent to `[]`. | |
The presence of _name_ determines whether this is a function declaration or a | |
lambda expression. The trailing `;` in the first form is required for a function declaration, but is not part of the syntax of a lambda expression. |
| `ref` | Capture "by-reference" behaving as a C++ reference | | ||
| `const ref` | Capture "by-const-reference" behaving as a C++ const reference | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suppose I want to write this:
let a: String = "long string I'd rather not make a copy of";
DoThingWithLazyGetter(fn [???] => a);
Can a ref
capture be used to capture a let
binding? If so, what happens -- does that create a temporary and capture a reference to it, or does that capture a value as if by [a: auto = a]
?
If not, I think the outcome is that there isn't a way to capture a let
binding without renaming it. You can use a function field, but our name shadowing rules would suggest that you must use a new name for the function field. I wonder if it'd be worth adding syntax for capturing a value as a value, rather than as an object.
proposals/p3848.md
Outdated
The final case is by-value function fields. Since C++ const references, when | ||
made into fields of a class, prevent the class from being copied, so too should | ||
by-value function fields prevent the function in which it is contained from | ||
being copied. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we distinguish between copy construction and copy assignment here? Const reference fields in C++ only prevent copy assignment, not copy construction.
This means that, if a function holds a by-object function field, if the type of | ||
the field is copyable, so too is the function that contains it. This also | ||
applies to by-copy and by-const-copy captures. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just to check my understanding:
// Returns the number of times it's been called.
fn Counter[var n: i32 = 0]() { ++n; return n; }
fn Run() {
Print(Counter());
Print(Counter());
var my_counter: auto = Counter;
Print(my_counter());
Print(my_counter());
Print(Counter());
}
... would print 1 2 3 4 3.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes that is correct
be restricted to only non-public interfaces. **This alternative will be put | ||
forth as a leads question before a decision is made.** | ||
|
||
## Function Captures |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Something it might be good to mention here:
If a function object F
has mutable state, either because it has a non-const
copy
capture or because it has a var
function field, then a call to F
should require the callee to be a reference expression rather than a value expression. We need a mutable handle to the function in order to be able to mutate its mutable state.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added a note with this
by-value function fields prevent the function in which it is contained from | ||
being copied. | ||
|
||
## Self and Recursion |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Given the direction in #3720, an expression of the form x.(F)
, where F
is a function with a self
or addr self
parameter, produces a callable that holds the value of x
, and does not hold the value of F
. As a consequence, I think we can't support combining captures and function fields with a self
parameter under that model.
Would that be a reasonable restriction to impose here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure! I'm fine with that. Added a note about this.
…ge#3884) I'm poking at adding similar validation for `class` merging; this refactors support so that it can easily be shared.
This is mainly to prevent a crash. We should typically have a valid location, but in cases of bugs I think this is better than a simple check-failure (namely, provides the diagnostic to give better context of why the diagnostic location looks bad). I also think we might have more invalid locations in the future. Note I ran into this because we weren't setting the definition_id for a class in import_ref; I think this made it much easier to examine.
…carbon-language#3889) Allow an explicit `as` conversion to convert between adapters and their adapted types. Also make the value representation of an adapter be the same as the value representation of the adapted type so that the conversion is always possible. --------- Co-authored-by: josh11b <15258583+josh11b@users.noreply.github.com>
This is just to be able to directly run the driver (e.g., `bazel run //toolchain/driver:carbon compile foo.carbon`); it shouldn't affect anything else.
…age#3892) Per offline discussion with chandlerc and jonmeow, use different builtins for signed versus unsigned integer ops instead of looking at the type. In this commit, the arithmetic builtins (add, sub, negate, mul, div, mod) are split. I'll apply the same change to comparisons and to right shift in separate PRs.
) Factor out `SemIR::InstNamer` and also use it when lowering to LLVM IR. Automatically name all instructions created with our `IRBuilder` based on the name computed by the `InstNamer`, and likewise name basic blocks using the label generated by the `InstNamer`. Move some of the existing naming logic out from lower into `InstNamer` so that it's also used in SemIR. In particular, we now name call instructions after their callee, or after the builtin name for calls to builtins. Computing and adding these names isn't completely free. This instruction naming is designed to be optional, so that we can turn it off for builds where the LLVM IR will only be converted to assembly and won't be seen by a human, but so far it's enabled unconditionally. We can tune that later as needed.
…uage#3891) This doesn't actually track whether a declaration is `extern`. It does, however: - Factor out and expand merge support for classes, sharing handling with functions. - This makes the ClassRedefinition diagnostic redundant, as the redeclaration checking overlaps. - Add partial `extern` handling to class handling; just some verifications of correct use. - Factor out `extern` on member handling for sharing with `fn`. - Fixes a bug in import_ref where a class's definition_id wasn't assigned when defining. This changes how a redefinition is handled (replaced, rather than merged). I don't know whether that's ideal, but I think it results in easy-to-understand consequences, and it's more consistent with how `fn` works. There's enough work here that this felt like a decent cut point, particularly as the amount of work to actually add `extern` tracking will be significant.
Adds support for unary `-` and binary `+`, `-`, `*`, `/` for floating point types. Real literals are now transformed to `llvm::APFloat`s during the check phase into the `FloatLiteral` instruction. This PR likely collides a bit with carbon-language#3892 and might need to be updated when that one is merged.
…ve. (carbon-language#3895) The driver now looks for all files under core/prelude/ and considers them all to be part of the prelude. The driver also now only processes the prelude in `--phase=check` and later, when it would actually be imported. With that done, add a simple `carbon_binary` build rule and use it to build the example in `//examples`. This should cause the example to be built as part of our continuous integration. --------- Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
…3899) Adds support for builtin comparison operations for floats (`==`, `!=`, `<`, `<=`, `>`, `>=`).
…bon-language#3900) These are no longer necessary after carbon-language#3898.
This adds a `BindExport` instruction in order to better track the location of the `export` itself, but a `bind_name_id` is also added to `ImportRef` so that we know quickly where to put it in name lookup. Merging identical names is a TODO. I haven't quite decided how best to achieve that, because I do think the BindExport should be what's actually added to name lookup. Also, I will probably add a mode to DeclNameStack that blocks non-namespace scopes. This seems to already be an error, but the wrong one (maybe due to lack of support for cross-file decl/def support).
This implements recent updates to carbon-language#3938
Fix use of newly deprecated API
…e#3954) I think this is a key remaining bit of polish for intra-package exports. Next I'm going to be dealing with cross-package exports, though I think the fundamentals here will remain intact. Extern declarations could cause issues for the current approach, but I think that can be addressed separately. I don't think it's a fundamental problem, more just incremental. --------- Co-authored-by: Richard Smith <richard@metafoo.co.uk>
The toolchain was iterating a map of package name to import list in a couple of places to do things beyond counting or other order-invariant operations. The result was that the specific hashtable iteration order influenced the order of SemIR generated (and other behaviors like diagnostic emission I suspect, but the source location sorting probably hid this). Switching to a hashtable implementation with any order seeding that changes run-to-run immediately shows the SemIR order fluctuating without this. This PR fixes that by instead accumulating the package imports data in a vector and using a map to vector indices. This is also slightly more efficient, although that seems unlikely to be an important factor here. There was only one insertion point so I've just hand coded the management of the indices and map, but happy to take a different approach or use an abstraction here if desired. One awkward aspect of this is that some of the loops need access to the package name as well. I've just added storage for that as these seem unlikely to be huge arrays of 10s of 1000s of imported packages, so the double storage of the identifier ID seems likely OK. But again, happy to take a different approach here if desired. It also seems like it might be possible to work out the identifier from the node, but I kept the patch more direct for simplicity. I've also not used the LLVM `MapVector` abstraction of this pattern. This was mostly to avoid adding another layer of abstractions to our data structures, and because this is the first time we've hit this really. My experience is also that it is reasonably often that there is a more efficient way to orient the vector and map than what is automatically provided. But that may just be my experience.
…guage#3955) Looking at `export` handling, I noticed and figured to fix this case first. Also makes the test file prelude-agnostic.
Require exact syntactic matching in redeclarations. Provide new terminology for redeclaration matching and agreement. Specify non-redeclaration rules for the other contexts where we require multiple declarations to match, such as `impl`s of `interfaces`, `impl`s of `virtual fn`s. --------- Co-authored-by: Chandler Carruth <chandlerc@gmail.com> Co-authored-by: Carbon Infra Bot <carbon-external-infra@google.com>
…guage#3957) Mechanically, replacing Directive->Decl, directive->declaration, _declaration->_decl (to avoid comments). Context: https://discord.com/channels/655572317891461132/963846118964350976/1241145948625703062
These likely predate the CI integration for `clang-tidy` runs. Most of these seem good generally, even though I disabled some with nolint comments. The multilevel pointer one seems almost like a bug in the check to detect the specific case of `memcpy`, but otherwise seems like a solid lint.
Change syntax for package declaration to put the `impl` keyword at the start and remove the `api` keyword. To support this, rearrange processing of package, library, and import declarations to use the general modifier handling support in declaration parsing rather than special-case logic. There is an ambiguity in `impl package.Foo as Bar`, which we resolve by treating `package` as an introducer after a modifier only if it's not followed by `.`.
…language#3953) I have made the necessary changes to https://github.com/carbon-language/carbon-lang/tree/trunk/utils/vscode for the VScode syntax highlighter to work: - [x] Changes have been tested and found to be working. --------- Co-authored-by: Richard Smith <richard@metafoo.co.uk> Co-authored-by: Carbon Infra Bot <carbon-external-infra@google.com>
… across 1 directory (carbon-language#3964) Bumps the pip group with 1 update in the /github_tools directory: [requests](https://github.com/psf/requests). Updates `requests` from 2.31.0 to 2.32.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/psf/requests/releases">requests's releases</a>.</em></p> <blockquote> <h2>v2.32.0</h2> <h2>2.32.0 (2024-05-20)</h2> <h2>🐍 PYCON US 2024 EDITION 🐍</h2> <p><strong>Security</strong></p> <ul> <li>Fixed an issue where setting <code>verify=False</code> on the first request from a Session will cause subsequent requests to the <em>same origin</em> to also ignore cert verification, regardless of the value of <code>verify</code>. (<a href="https://github.com/psf/requests/security/advisories/GHSA-9wx4-h78v-vm56">https://github.com/psf/requests/security/advisories/GHSA-9wx4-h78v-vm56</a>)</li> </ul> <p><strong>Improvements</strong></p> <ul> <li><code>verify=True</code> now reuses a global SSLContext which should improve request time variance between first and subsequent requests. It should also minimize certificate load time on Windows systems when using a Python version built with OpenSSL 3.x. (<a href="https://redirect.github.com/psf/requests/issues/6667">#6667</a>)</li> <li>Requests now supports optional use of character detection (<code>chardet</code> or <code>charset_normalizer</code>) when repackaged or vendored. This enables <code>pip</code> and other projects to minimize their vendoring surface area. The <code>Response.text()</code> and <code>apparent_encoding</code> APIs will default to <code>utf-8</code> if neither library is present. (<a href="https://redirect.github.com/psf/requests/issues/6702">#6702</a>)</li> </ul> <p><strong>Bugfixes</strong></p> <ul> <li>Fixed bug in length detection where emoji length was incorrectly calculated in the request content-length. (<a href="https://redirect.github.com/psf/requests/issues/6589">#6589</a>)</li> <li>Fixed deserialization bug in JSONDecodeError. (<a href="https://redirect.github.com/psf/requests/issues/6629">#6629</a>)</li> <li>Fixed bug where an extra leading <code>/</code> (path separator) could lead urllib3 to unnecessarily reparse the request URI. (<a href="https://redirect.github.com/psf/requests/issues/6644">#6644</a>)</li> </ul> <p><strong>Deprecations</strong></p> <ul> <li>Requests has officially added support for CPython 3.12 (<a href="https://redirect.github.com/psf/requests/issues/6503">#6503</a>)</li> <li>Requests has officially added support for PyPy 3.9 and 3.10 (<a href="https://redirect.github.com/psf/requests/issues/6641">#6641</a>)</li> <li>Requests has officially dropped support for CPython 3.7 (<a href="https://redirect.github.com/psf/requests/issues/6642">#6642</a>)</li> <li>Requests has officially dropped support for PyPy 3.7 and 3.8 (<a href="https://redirect.github.com/psf/requests/issues/6641">#6641</a>)</li> </ul> <p><strong>Documentation</strong></p> <ul> <li>Various typo fixes and doc improvements.</li> </ul> <p><strong>Packaging</strong></p> <ul> <li>Requests has started adopting some modern packaging practices. The source files for the projects (formerly <code>requests</code>) is now located in <code>src/requests</code> in the Requests sdist. (<a href="https://redirect.github.com/psf/requests/issues/6506">#6506</a>)</li> <li>Starting in Requests 2.33.0, Requests will migrate to a PEP 517 build system using <code>hatchling</code>. This should not impact the average user, but extremely old versions of packaging utilities may have issues with the new packaging format.</li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/matthewarmand"><code>@matthewarmand</code></a> made their first contribution in <a href="https://redirect.github.com/psf/requests/pull/6258">psf/requests#6258</a></li> <li><a href="https://github.com/cpzt"><code>@cpzt</code></a> made their first contribution in <a href="https://redirect.github.com/psf/requests/pull/6456">psf/requests#6456</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/psf/requests/blob/main/HISTORY.md">requests's changelog</a>.</em></p> <blockquote> <h2>2.32.0 (2024-05-20)</h2> <p><strong>Security</strong></p> <ul> <li>Fixed an issue where setting <code>verify=False</code> on the first request from a Session will cause subsequent requests to the <em>same origin</em> to also ignore cert verification, regardless of the value of <code>verify</code>. (<a href="https://github.com/psf/requests/security/advisories/GHSA-9wx4-h78v-vm56">https://github.com/psf/requests/security/advisories/GHSA-9wx4-h78v-vm56</a>)</li> </ul> <p><strong>Improvements</strong></p> <ul> <li><code>verify=True</code> now reuses a global SSLContext which should improve request time variance between first and subsequent requests. It should also minimize certificate load time on Windows systems when using a Python version built with OpenSSL 3.x. (<a href="https://redirect.github.com/psf/requests/issues/6667">#6667</a>)</li> <li>Requests now supports optional use of character detection (<code>chardet</code> or <code>charset_normalizer</code>) when repackaged or vendored. This enables <code>pip</code> and other projects to minimize their vendoring surface area. The <code>Response.text()</code> and <code>apparent_encoding</code> APIs will default to <code>utf-8</code> if neither library is present. (<a href="https://redirect.github.com/psf/requests/issues/6702">#6702</a>)</li> </ul> <p><strong>Bugfixes</strong></p> <ul> <li>Fixed bug in length detection where emoji length was incorrectly calculated in the request content-length. (<a href="https://redirect.github.com/psf/requests/issues/6589">#6589</a>)</li> <li>Fixed deserialization bug in JSONDecodeError. (<a href="https://redirect.github.com/psf/requests/issues/6629">#6629</a>)</li> <li>Fixed bug where an extra leading <code>/</code> (path separator) could lead urllib3 to unnecessarily reparse the request URI. (<a href="https://redirect.github.com/psf/requests/issues/6644">#6644</a>)</li> </ul> <p><strong>Deprecations</strong></p> <ul> <li>Requests has officially added support for CPython 3.12 (<a href="https://redirect.github.com/psf/requests/issues/6503">#6503</a>)</li> <li>Requests has officially added support for PyPy 3.9 and 3.10 (<a href="https://redirect.github.com/psf/requests/issues/6641">#6641</a>)</li> <li>Requests has officially dropped support for CPython 3.7 (<a href="https://redirect.github.com/psf/requests/issues/6642">#6642</a>)</li> <li>Requests has officially dropped support for PyPy 3.7 and 3.8 (<a href="https://redirect.github.com/psf/requests/issues/6641">#6641</a>)</li> </ul> <p><strong>Documentation</strong></p> <ul> <li>Various typo fixes and doc improvements.</li> </ul> <p><strong>Packaging</strong></p> <ul> <li>Requests has started adopting some modern packaging practices. The source files for the projects (formerly <code>requests</code>) is now located in <code>src/requests</code> in the Requests sdist. (<a href="https://redirect.github.com/psf/requests/issues/6506">#6506</a>)</li> <li>Starting in Requests 2.33.0, Requests will migrate to a PEP 517 build system using <code>hatchling</code>. This should not impact the average user, but extremely old versions of packaging utilities may have issues with the new packaging format.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/psf/requests/commit/d6ebc4a2f1f68b7e355fb7e4dd5ffc0845547f9f"><code>d6ebc4a</code></a> v2.32.0</li> <li><a href="https://github.com/psf/requests/commit/9a40d1277807f0a4f26c9a37eea8ec90faa8aadc"><code>9a40d12</code></a> Avoid reloading root certificates to improve concurrent performance (<a href="https://redirect.github.com/psf/requests/issues/6667">#6667</a>)</li> <li><a href="https://github.com/psf/requests/commit/0c030f78d24f29a459dbf39b28b4cc765e2153d7"><code>0c030f7</code></a> Merge pull request <a href="https://redirect.github.com/psf/requests/issues/6702">#6702</a> from nateprewitt/no_char_detection</li> <li><a href="https://github.com/psf/requests/commit/555b870eb19d497ddb67042645420083ec8efb02"><code>555b870</code></a> Allow character detection dependencies to be optional in post-packaging steps</li> <li><a href="https://github.com/psf/requests/commit/d6dded3f00afcf56a7e866cb0732799045301eb0"><code>d6dded3</code></a> Merge pull request <a href="https://redirect.github.com/psf/requests/issues/6700">#6700</a> from franekmagiera/update-redirect-to-invalid-uri-test</li> <li><a href="https://github.com/psf/requests/commit/bf24b7d8d17da34be720c19e5978b2d3bf94a53b"><code>bf24b7d</code></a> Use an invalid URI that will not cause httpbin to throw 500</li> <li><a href="https://github.com/psf/requests/commit/2d5f54779ad174035c5437b3b3c1146b0eaf60fe"><code>2d5f547</code></a> Pin 3.8 and 3.9 runners back to macos-13 (<a href="https://redirect.github.com/psf/requests/issues/6688">#6688</a>)</li> <li><a href="https://github.com/psf/requests/commit/f1bb07d39b74d6444e333879f8b8a3d9dd4d2311"><code>f1bb07d</code></a> Merge pull request <a href="https://redirect.github.com/psf/requests/issues/6687">#6687</a> from psf/dependabot/github_actions/github/codeql-act...</li> <li><a href="https://github.com/psf/requests/commit/60047ade64b0b882cbc94e047198818ab580911e"><code>60047ad</code></a> Bump github/codeql-action from 3.24.0 to 3.25.0</li> <li><a href="https://github.com/psf/requests/commit/31ebb8102c00f8cf8b396a6356743cca4362e07b"><code>31ebb81</code></a> Merge pull request <a href="https://redirect.github.com/psf/requests/issues/6682">#6682</a> from frenzymadness/pytest8</li> <li>Additional commits viewable in <a href="https://github.com/psf/requests/compare/v2.31.0...v2.32.0">compare view</a></li> </ul> </details> <br /> [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=requests&package-manager=pip&previous-version=2.31.0&new-version=2.32.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/carbon-language/carbon-lang/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…nguage#3959) A lot of the JSON we use is parsed by VSCode or other systems that are happy to have comments in them, and we should retain a license header there. We can exclude specific files where this is a problem. I think the `package.json` and generated lock file from it are two such cases where we can't have the license header, but we can directly exclude more as needed. This should help make sure that when we *do* have a license header in a JSON file it stays up to date and is formatted canonically.
…arbon-language#3965) This isn't *technically* a C-style cast, but a function-style cast. And newer versions of `clang-tidy` no longer fire on this code, so it is a little sad to have to work around. But the version on our build bots seems old enough to still hit this issue (and possibly some others). Our merge queue also doesn't seem to catch these reliably, but that's for a separate PR.
Co-authored-by: Josh L <josh11b@users.noreply.github.com>
…n-language#3963. (carbon-language#3966) I think the template files are simply an oversight. The fuzz files should probably be updated because failing on the `package` line isn't an interesting test of logic. Plus one minor comment edit.
Since notes can be above, it's unclear without.
…#3967) Starts warning on duplicate "export name" because I'm updating name lookup to make it work. Need to think harder about how to handle cross-package "export import". But adding some failing tests to sketch out what *should* work.
This is mostly to reduce code complexity at call sites. I was considering pulling out a wrapper type, but it seems a bit small for that right now.
I forgot to `git add` these files.
…es. (carbon-language#3971) This makes cross-package `export import` work. Note collisions still occur with cross-package "export name".
Note, I assume this doesn't affect all the TODOs (like for i32.carbon), but does cut some things down (and requires updating some tests that have prelude name conflicts, but I think they were intended to be updated this way).
A member of an imported entity can be an ImportRefUnloaded in an imported SemIR. To address this, find a loaded version of it for use.
carbon-language#3979) Switch from recursing into non-canonical instruction fields to separately canonicalizing those fields. This means we now form canonical `InstBlockId`s, `TypeBlockId`s, `IntId`s, `FloatId`s, and `BindNameId`s at least in the cases when they're referenced by a constant instruction. This reduces the overall runtime for @chandlerc's 10MLoC example by 27.5% on my machine.
Modifies the core package and literal handling to use factory functions for standard type literals. Updates function/builtin/import.carbon to stop depending on the prelude, since it would list all the impls in the core file. Updates alias/builtins.carbon to be failing (the type values cannot be aliased).
To support migration from C++ to Carbon, there must be valid syntax to capture the behavior of C++ lambdas. They are defined at their point of use and are often anonymous, meaning replacing them solely with function declarations will create an ergonomic burden compounded by the need for the migration tool to select a name. This PR proposes a path forward to add lambdas to Carbon and augment function declarations accordingly.
Associated discussion docs: