Promote the wasm32-wasip2 target to Tier 2 by alexcrichton · Pull Request #126967 · rust-lang/rust (original) (raw)
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 andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Conversation25 Commits4 Checks0 Files changed
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
[ Show hidden characters]({{ revealButtonHref }})
This commit promotes the wasm32-wasip2 Rust target to tier 2 as proposed in rust-lang/compiler-team#760. There are two major changes in this PR:
- The
dist-various-2container, which already produces the other WASI targets, now has an extra target added forwasm32-wasip2. - A new
wasm-component-ldbinary is added to all host toolchains when LLD is enabled. This is the linker used for thewasm32-wasip2target.
This new linker is added for all host toolchains to ensure that all host toolchains can produce the wasm32-wasip2 target. This is similar to how rust-lld was originally included for all host toolchains to be able to produce WebAssembly output when the targets were first added. The new linker is developed here and is pulled in via a crates.io-based dependency to the tree here.
rustbot has assigned @Mark-Simulacrum.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.
Use r? to explicitly pick a reviewer
rustbot added A-testsuite
Area: The testsuite used to check the correctness of rustc
Status: Awaiting review from the assignee but also interested parties.
Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)
Relevant to the infrastructure team, which will review and decide on the PR/issue.
labels
I'll note that rust-lang/compiler-team#760 is not complete so this shouldn't merge yet. I'm opening this up ahead of time to get feedback on the more technical side of things as opposed to the MCP-side of things.
One specific question I'd have is that this PR is adding more exceptions to the license check for crates that have an Apache-2.0 WITH LLVM-exception license. I understand it's easiest to stick to MIT OR Apache-2.0 like most other Rust crates and such, and to that effect we're going to try to relicense the wasm-tools repository to Apache-2.0 WITH LLVM-exception OR MIT OR Apache-2.0 soon. In lieu of this though, as that will probably take a bit, two questions:
- Is it ok to add more exceptions here in the meantime?
- Is it necessary to go through the relicensing effort? There are a number of other crates such as
ar_archive_writerandrustc_apfloatand Cranelift crates which have the sameApache-2.0 WITH LLVM-exception. I don't expect Wasmtime's own license (and thus Cranelift's) to change, it's just thewasm-tools-family of crates that may change. If this is an acceptable state, should we consider it ok to not relicense wasm-tools?
Also I realize that licensing decisions are probably best not made in PRs, so this can also be considered as mostly highlighting the issue and if you know a better forum/location to discuss this I'm happy to raise something there.
This comment has been minimized.
One specific question I'd have is that this PR is adding more exceptions to the license check for crates that have an Apache-2.0 WITH LLVM-exception license
My sense is that we're fine with extra dependencies with that license, especially in the same pool (i.e., wasm-related crates). cc @wesleywiser @davidtwco -- does that align with your expectations? Can you help drive the licensing story with the Foundation's help if needed?
I'm not sure whether re-licensing is worth the trouble or not as such. Though long-term it does likely hurt our ability to move code across the boundary of these crates, so if there's expectations that might be warranted it might be worth investing while there's less people involved (and so it's easier).
This is similar to how rust-lld was originally included for all host toolchains to be able to produce WebAssembly output when the targets were first added. The new linker is developed here and is pulled in via a crates.io-based dependency to the tree here.
Can you say how big the extra binary is? I don't remember the rationale back then, but it feels plausible that the linker should be part of the wasm target component... maybe I'm missing something obvious? (lld is distinct in that lots of targets use it -- at least now -- whereas this one seems like that may not be true for).
Ok sounds good on the licensing front. I opened bytecodealliance/wasm-tools#1637 and bytecodealliance/wit-bindgen#987 earlier anyway to start the process and see generally if it can be done, so that's progressing in parallel too.
As for binary sizes the linker locally is ~5M (4.6 on macos and 5.2 on linux). Making this part of the wasm component would require having a binary for each supported host architeture in the component as well which I think would be pretty difficult build-wise and also would make the wasm component significantly larger. IIRC we wrestled with this at the time when adding rust-lld as well and the decision was to ship it with all host components as that was the simplest solution at the time. Now that was also guided by the fact that we wanted to eventually use LLD for more targets one day (as has since happened) and this won't ever be used for any other target. I can look into size-optimizing the binary if 5M is too large.
My sense is that we're fine with extra dependencies with that license, especially in the same pool (i.e., wasm-related crates). cc @wesleywiser @davidtwco -- does that align with your expectations? Can you help drive the licensing story with the Foundation's help if needed?
Yes, I think that's ok. Obviously, it would be more ideal if we had the standard licensing applied so relicensing would still be preferable but not a blocker. Thanks @alexcrichton for starting that conversation in the bytecodealliance projects!
This commit promotes the wasm32-wasip2 Rust target to tier 2 as
proposed in rust-lang/compiler-team#760. There are two major changes in
this PR:
- The
dist-various-2container, which already produces the other WASI targets, now has an extra target added forwasm32-wasip2. - A new
wasm-component-ldbinary is added to all host toolchains when LLD is enabled. This is the linker used for thewasm32-wasip2target.
This new linker is added for all host toolchains to ensure that all host
toolchains can produce the wasm32-wasip2 target. This is similar to
how rust-lld was originally included for all host toolchains to be
able to produce WebAssembly output when the targets were first added.
The new linker is developed here and is pulled in
via a crates.io-based dependency to the tree here.
Reuse preexisting macro and switch it to a "bootstrap tool" to try to resolve build issues.
This comment has been minimized.
These commits modify the Cargo.lock file. Unintentional changes to Cargo.lock can be introduced when switching branches and rebasing PRs.
If this was unintentional then you should revert the changes before this PR is merged.
Otherwise, you can ignore this comment.
The list of allowed third-party dependencies may have been modified! You must ensure that any new dependencies have compatible licenses before merging.
Ok I've redone a bit how the build is done to fix the build error from before, notably unconditionally using the stage0 compiler for the wasm-component-ld linker to ensure that it avoids the nightly issue with the ahash dependency. The FCP has finished here and otherwise the relicensing efforts are underway and should hopefully be complete in a month or so with new published versions at which point I'll update this to remove the exceptions.
In the meantime this should otherwise be ready for review and I'm happy to dig further into the binary size if that's a concern. The easiest win is to probably compile with -Cpanic=abort which I can try to figure out how to plumb through if desired.
📌 Commit 4cd6eee has been approved by Mark-Simulacrum
It is now in the queue for this repository.
bors added S-waiting-on-bors
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
and removed S-waiting-on-review
Status: Awaiting review from the assignee but also interested parties.
labels
Let's land this. I think we can update the licensing and consider further improvements in binary size in the future, no need to block on that.
workingjubilee added a commit to workingjubilee/rustc that referenced this pull request
… r=Mark-Simulacrum
Promote the wasm32-wasip2 target to Tier 2
This commit promotes the wasm32-wasip2 Rust target to tier 2 as proposed in rust-lang/compiler-team#760. There are two major changes in this PR:
- The
dist-various-2container, which already produces the other WASI targets, now has an extra target added forwasm32-wasip2. - A new
wasm-component-ldbinary is added to all host toolchains when LLD is enabled. This is the linker used for thewasm32-wasip2target.
This new linker is added for all host toolchains to ensure that all host toolchains can produce the wasm32-wasip2 target. This is similar to how rust-lld was originally included for all host toolchains to be able to produce WebAssembly output when the targets were first added. The new linker is developed here and is pulled in via a crates.io-based dependency to the tree here.
workingjubilee added a commit to workingjubilee/rustc that referenced this pull request
… r=Mark-Simulacrum
Promote the wasm32-wasip2 target to Tier 2
This commit promotes the wasm32-wasip2 Rust target to tier 2 as proposed in rust-lang/compiler-team#760. There are two major changes in this PR:
- The
dist-various-2container, which already produces the other WASI targets, now has an extra target added forwasm32-wasip2. - A new
wasm-component-ldbinary is added to all host toolchains when LLD is enabled. This is the linker used for thewasm32-wasip2target.
This new linker is added for all host toolchains to ensure that all host toolchains can produce the wasm32-wasip2 target. This is similar to how rust-lld was originally included for all host toolchains to be able to produce WebAssembly output when the targets were first added. The new linker is developed here and is pulled in via a crates.io-based dependency to the tree here.
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request
…dist-manifest, r=Mark-Simulacrum
Add wasm32-wasip2 to build-manifest tool
This is an accidental omission of mine from rust-lang#126967 which means that rustup target add wasm32-wasip2 isn't working on today's nightlies.
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
Rollup merge of rust-lang#127867 - alexcrichton:add-wasm32-wasip2-to-dist-manifest, r=Mark-Simulacrum
Add wasm32-wasip2 to build-manifest tool
This is an accidental omission of mine from rust-lang#126967 which means that rustup target add wasm32-wasip2 isn't working on today's nightlies.
alexcrichton added a commit to alexcrichton/rust that referenced this pull request
This is another accidental omission from rust-lang#126967 (in addition
to rust-lang#127867) which fixes an issue where wasm-component-ld isn't
distributed via rustup just yet because while it's present in the
sysroot it's not present in the tarballs.
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request
…t-ld-for-real-this-time-maybe-let-see-after-this-merges, r=onur-ozkan
Fix inclusion of wasm-component-ld in dist artifacts
This is another accidental omission from rust-lang#126967 (in addition to rust-lang#127867) which fixes an issue where wasm-component-ld isn't distributed via rustup just yet because while it's present in the sysroot it's not present in the tarballs.
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
Rollup merge of rust-lang#128060 - alexcrichton:include-wasm-component-ld-for-real-this-time-maybe-let-see-after-this-merges, r=onur-ozkan
Fix inclusion of wasm-component-ld in dist artifacts
This is another accidental omission from rust-lang#126967 (in addition to rust-lang#127867) which fixes an issue where wasm-component-ld isn't distributed via rustup just yet because while it's present in the sysroot it's not present in the tarballs.
alexcrichton added a commit to alexcrichton/rust that referenced this pull request
It turns out the stars did not actually align for this to get released
in Rust 1.81 alas. Full tier 2 status for wasm32-wasip2 required two
PRs:
- rust-lang#126967 - this made it into Rust 1.81
- rust-lang#127867 - this didn't make the cut and is in Rust 1.82 instead
This wasn't caught until just after today's release so the plan is to remove the release notes for 1.81 and coordinate to instead add these as release notes to 1.82.
alexcrichton added a commit to alexcrichton/rust that referenced this pull request
It turns out the stars did not actually align for this to get released
in Rust 1.81 alas. Full tier 2 status for wasm32-wasip2 required two
PRs:
- rust-lang#126967 - this made it into Rust 1.81
- rust-lang#127867 - this didn't make the cut and is in Rust 1.82 instead
This wasn't caught until just after today's release so the plan is to remove the release notes for 1.81 and coordinate to instead add these as release notes to 1.82.
This was referenced
Sep 5, 2024
workingjubilee added a commit to workingjubilee/rustc that referenced this pull request
…release-notes, r=pietroalbini
Remove wasm32-wasip2's tier 2 status from release notes
It turns out the stars did not actually align for this to get released in Rust 1.81 alas. Full tier 2 status for wasm32-wasip2 required two PRs:
- rust-lang#126967 - this made it into Rust 1.81
- rust-lang#127867 - this didn't make the cut and is in Rust 1.82 instead
This wasn't caught until just after today's release so the plan is to remove the release notes for 1.81 and coordinate to instead add these as release notes to 1.82.
workingjubilee added a commit to workingjubilee/rustc that referenced this pull request
…release-notes, r=pietroalbini
Remove wasm32-wasip2's tier 2 status from release notes
It turns out the stars did not actually align for this to get released in Rust 1.81 alas. Full tier 2 status for wasm32-wasip2 required two PRs:
- rust-lang#126967 - this made it into Rust 1.81
- rust-lang#127867 - this didn't make the cut and is in Rust 1.82 instead
This wasn't caught until just after today's release so the plan is to remove the release notes for 1.81 and coordinate to instead add these as release notes to 1.82.
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request
…release-notes, r=pietroalbini
Remove wasm32-wasip2's tier 2 status from release notes
It turns out the stars did not actually align for this to get released in Rust 1.81 alas. Full tier 2 status for wasm32-wasip2 required two PRs:
- rust-lang#126967 - this made it into Rust 1.81
- rust-lang#127867 - this didn't make the cut and is in Rust 1.82 instead
This wasn't caught until just after today's release so the plan is to remove the release notes for 1.81 and coordinate to instead add these as release notes to 1.82.
| # `wasm-component-ld` |
|---|
| This wrapper is a wrapper around the [`wasm-component-ld`] crates.io crate. That |
| crate. That crate is itself a thin wrapper around two pieces: |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's an incomplete sentence here (and still seems to be there on master).
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh oops, I'll work on fixing this.
EDIT: #130034
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
Rollup merge of rust-lang#129995 - alexcrichton:remove-wasm32-wasip2-release-notes, r=pietroalbini
Remove wasm32-wasip2's tier 2 status from release notes
It turns out the stars did not actually align for this to get released in Rust 1.81 alas. Full tier 2 status for wasm32-wasip2 required two PRs:
- rust-lang#126967 - this made it into Rust 1.81
- rust-lang#127867 - this didn't make the cut and is in Rust 1.82 instead
This wasn't caught until just after today's release so the plan is to remove the release notes for 1.81 and coordinate to instead add these as release notes to 1.82.
workingjubilee added a commit to workingjubilee/rustc that referenced this pull request
…nt-ld-comments, r=onur-ozkan
Fix enabling wasm-component-ld to match other tools
It was [pointed out recently][comment] that enabling wasm-component-ld as a host tool is different from other host tools. This commit refactors the logic to match by deduplicating selection of when to build other tools and then using the same logic for wasm-component-ld.
While here I also fixed a typo pointed out in rust-lang#126967 (review)
[comment]: rust-lang#127866 (comment)
workingjubilee added a commit to workingjubilee/rustc that referenced this pull request
…nt-ld-comments, r=onur-ozkan
Fix enabling wasm-component-ld to match other tools
It was [pointed out recently][comment] that enabling wasm-component-ld as a host tool is different from other host tools. This commit refactors the logic to match by deduplicating selection of when to build other tools and then using the same logic for wasm-component-ld.
While here I also fixed a typo pointed out in rust-lang#126967 (review)
[comment]: rust-lang#127866 (comment)
workingjubilee added a commit to workingjubilee/rustc that referenced this pull request
…nt-ld-comments, r=onur-ozkan
Fix enabling wasm-component-ld to match other tools
It was [pointed out recently][comment] that enabling wasm-component-ld as a host tool is different from other host tools. This commit refactors the logic to match by deduplicating selection of when to build other tools and then using the same logic for wasm-component-ld.
While here I also fixed a typo pointed out in rust-lang#126967 (review)
[comment]: rust-lang#127866 (comment)
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
Rollup merge of rust-lang#130034 - alexcrichton:fix-some-wasm-component-ld-comments, r=onur-ozkan
Fix enabling wasm-component-ld to match other tools
It was [pointed out recently][comment] that enabling wasm-component-ld as a host tool is different from other host tools. This commit refactors the logic to match by deduplicating selection of when to build other tools and then using the same logic for wasm-component-ld.
While here I also fixed a typo pointed out in rust-lang#126967 (review)
[comment]: rust-lang#127866 (comment)
RalfJung pushed a commit to RalfJung/miri that referenced this pull request
…ments, r=onur-ozkan
Fix enabling wasm-component-ld to match other tools
It was [pointed out recently][comment] that enabling wasm-component-ld as a host tool is different from other host tools. This commit refactors the logic to match by deduplicating selection of when to build other tools and then using the same logic for wasm-component-ld.
While here I also fixed a typo pointed out in rust-lang/rust#126967 (review)
[comment]: rust-lang/rust#127866 (comment)
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request
Pkgsrc changes:
- Adapt patches, apply to new vendored crates where needed.
- Back-port rust pull request 130110, "make dist vendoring configurable"
- Disable "dist vendoring", otherwise cargo would try to access the network during the build phase.
Upstream changes:
Version 1.81.0 (2024-09-05)
Language
- [Abort on uncaught panics in
extern "C"functions.] (rust-lang/rust#116088) - [Fix ambiguous cases of multiple
&in elided self lifetimes.] (rust-lang/rust#117967) - [Stabilize
#[expect]for lints (RFC 2383),] (rust-lang/rust#120924) like#[allow]with a warning if the lint is not fulfilled. - [Change method resolution to constrain hidden types instead of rejecting method candidates.] (rust-lang/rust#123962)
- [Bump
elided_lifetimes_in_associated_constantto deny.] (rust-lang/rust#124211) - [
offset_from: always allow pointers to point to the same address.] (rust-lang/rust#124921) - [Allow constraining opaque types during subtyping in the trait system.] (rust-lang/rust#125447)
- [Allow constraining opaque types during various unsizing casts.] (rust-lang/rust#125610)
- [Deny keyword lifetimes pre-expansion.] (rust-lang/rust#126762)
Compiler
- [Make casts of pointers to trait objects stricter.] (rust-lang/rust#120248)
- [Check alias args for well-formedness even if they have escaping bound vars.] (rust-lang/rust#123737)
- [Deprecate no-op codegen option
-Cinline-threshold=....] (rust-lang/rust#124712) - [Re-implement a type-size based limit.] (rust-lang/rust#125507)
- [Properly account for alignment in
transmutesize checks.] (rust-lang/rust#125740) - [Remove the
box_pointerslint.] (rust-lang/rust#126018) - [Ensure the interpreter checks bool/char for validity when they are used in a cast.] (rust-lang/rust#126265)
- [Improve coverage instrumentation for functions containing nested items.] (rust-lang/rust#127199)
- Target changes:
- [Add Tier 3
no_stdXtensa targets:] (rust-lang/rust#125141)xtensa-esp32-none-elf,xtensa-esp32s2-none-elf,xtensa-esp32s3-none-elf - [Add Tier 3
stdXtensa targets:] (rust-lang/rust#126380)xtensa-esp32-espidf,xtensa-esp32s2-espidf,xtensa-esp32s3-espidf - [Add Tier 3 i686 Redox OS target:]
(rust-lang/rust#126192)
i686-unknown-redox - [Promote
arm64ec-pc-windows-msvcto Tier 2.] (rust-lang/rust#126039) - [Promote
wasm32-wasip2to Tier 2.] (rust-lang/rust#126967) - [Promote
loongarch64-unknown-linux-muslto Tier 2 with host tools.] (rust-lang/rust#126298) - [Enable full tools and profiler for LoongArch Linux targets.] (rust-lang/rust#127078)
- [Unconditionally warn on usage of
wasm32-wasi.] (rust-lang/rust#126662) (see compatibility note below) - Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
- [Add Tier 3
Libraries
- [Split core's
PanicInfoand std'sPanicInfo.] (rust-lang/rust#115974) (see compatibility note below) - [Generalize
{Rc,Arc}::make_mut()to unsized types.] (rust-lang/rust#116113) - [Replace sort implementations with stable
driftsortand unstableipnsort.] (rust-lang/rust#124032) Allslice::sort*andslice::select_nth*methods are expected to see significant performance improvements. See the [research project] (https://github.com/Voultapher/sort-research-rs) for more details. - [Document behavior of
create_dir_allwith respect to empty paths.] (rust-lang/rust#125112) - [Fix interleaved output in the default panic hook when multiple threads panic simultaneously.] (rust-lang/rust#127397)
- Fix
Command's batch files argument escaping not working when file name has trailing whitespace or periods (CVE-2024-43402).
Stabilized APIs
- [
core::error] (https://doc.rust-lang.org/stable/core/error/index.html) - [
hint::assert_unchecked] (https://doc.rust-lang.org/stable/core/hint/fn.assert_unchecked.html) - [
fs::exists] (https://doc.rust-lang.org/stable/std/fs/fn.exists.html) - [
AtomicBool::fetch_not] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicBool.html#method.fetch_not) - [
Duration::abs_diff] (https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.abs_diff) - [
IoSlice::advance] (https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance) - [
IoSlice::advance_slices] (https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance_slices) - [
IoSliceMut::advance] (https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance) - [
IoSliceMut::advance_slices] (https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance_slices) - [
PanicHookInfo] (https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html) - [
PanicInfo::message] (https://doc.rust-lang.org/stable/core/panic/struct.PanicInfo.html#method.message) - [
PanicMessage] (https://doc.rust-lang.org/stable/core/panic/struct.PanicMessage.html)
These APIs are now stable in const contexts:
- [
char::from_u32_unchecked] (https://doc.rust-lang.org/stable/core/char/fn.from_u32_unchecked.html) (function) - [
char::from_u32_unchecked] (https://doc.rust-lang.org/stable/core/primitive.char.html#method.from_u32_unchecked) (method) - [
CStr::count_bytes] (https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.count_bytes) - [
CStr::from_ptr] (https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.from_ptr)
Cargo
- [Generated
.cargo_vcs_info.jsonis always included, even when--allow-dirtyis passed.] (rust-lang/cargo#13960) - [Disallow
package.license-fileandpackage.readmepointing to non-existent files during packaging.] (rust-lang/cargo#13921) - [Disallow passing
--release/--debugflag along with the--profileflag.] (rust-lang/cargo#13971) - [Remove
lib.pluginkey support inCargo.toml. Rust plugin support has been deprecated for four years and was removed in 1.75.0.] (rust-lang/cargo#13902)
Compatibility Notes
Usage of the
wasm32-wasitarget will now issue a compiler warning and request users switch to thewasm32-wasip1target instead. Both targets are the same,wasm32-wasiis only being renamed, and this [change to the WASI target] (https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html) is being done to enable removingwasm32-wasiin January 2025.We have renamed
std::panic::PanicInfotostd::panic::PanicHookInfo. The old name will continue to work as an alias, but will result in a deprecation warning starting in Rust 1.82.0.core::panic::PanicInfowill remain unchanged, however, as this is now a different type.The reason is that these types have different roles:
std::panic::PanicHookInfois the argument to the panic hook in std context (where panics can have an arbitrary payload), whilecore::panic::PanicInfois the argument to the#[panic_handler]in no_std context (where panics always carry a formatted message). Separating these types allows us to add more useful methods to these types, such asstd::panic::PanicHookInfo::payload_as_str()andcore::panic::PanicInfo::message().The new sort implementations may panic if a type's implementation of
Ord(or the given comparison function) does not implement a total order as the trait requires.Ord's supertraits (PartialOrd,Eq, andPartialEq) must also be consistent. The previous implementations would not "notice" any problem, but the new implementations have a good chance of detecting inconsistencies, throwing a panic rather than returning knowingly unsorted data.[In very rare cases, a change in the internal evaluation order of the trait solver may result in new fatal overflow errors.] (rust-lang/rust#126128)
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.
- [Add a Rust-for Linux
autoCI job to check kernel builds.] (rust-lang/rust#125209)
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request
This MR contains the following updates:
| Package | Update | Change |
|---|---|---|
| rust | minor | 1.81.0 -> 1.82.0 |
MR created with the help of el-capitano/tools/renovate-bot.
Proposed changes to behavior should be submitted there as MRs.
Release Notes
rust-lang/rust (rust)
v1.82.0
==========================
Language
- Don't make statement nonterminals match pattern nonterminals
- Patterns matching empty types can now be omitted in common cases
- Enforce supertrait outlives obligations when using trait impls
addr_of(_mut)!macros and the newly stabilized&raw (const|mut)are now safe to use with all static items- size_of_val_raw: for length 0 this is safe to call
- Reorder trait bound modifiers after
for<...>binder in trait bounds - Stabilize opaque type precise capturing (RFC 3617)
- Stabilize
&raw constand&raw mutoperators (RFC 2582) - Stabilize unsafe extern blocks (RFC 3484)
- Stabilize nested field access in
offset_of! - Do not require
Tto be live when dropping[T; 0] - Stabilize
constoperands in inline assembly - Stabilize floating-point arithmetic in
const fn - Stabilize explicit opt-in to unsafe attributes
- Document NaN bit patterns guarantees
Compiler
- Promote riscv64gc-unknown-linux-musl to tier 2
- Promote Mac Catalyst targets
aarch64-apple-ios-macabiandx86_64-apple-ios-macabito Tier 2, and ship them with rustup - Add tier 3 NuttX based targets for RISC-V and ARM
- Add tier 3 powerpc-unknown-linux-muslspe target
- Improved diagnostics to explain why a pattern is unreachable
- The compiler now triggers the unreachable code warning properly for async functions that don't return/are
-> ! - Promote
aarch64-apple-darwinto Tier 1 - Add Trusty OS target
aarch64-unknown-trustyandarmv7-unknown-trustyas tier 3 targets - Promote
wasm32-wasip2to Tier 2.
Libraries
Stabilized APIs
std::thread::Builder::spawn_uncheckedstd::str::CharIndices::offsetstd::option::Option::is_none_or[T]::is_sorted[T]::is_sorted_by[T]::is_sorted_by_keyIterator::is_sortedIterator::is_sorted_byIterator::is_sorted_by_keystd::future::Ready::into_innerstd::iter::repeat_nimpl<T: Clone> DoubleEndedIterator for Take<Repeat<T>>impl<T: Clone> ExactSizeIterator for Take<Repeat<T>>impl<T: Clone> ExactSizeIterator for Take<RepeatWith<T>>impl Default for std::collections::binary_heap::Iterimpl Default for std::collections::btree_map::RangeMutimpl Default for std::collections::btree_map::ValuesMutimpl Default for std::collections::vec_deque::Iterimpl Default for std::collections::vec_deque::IterMutRc<T>::new_uninitRc<T>::assume_initRc<[T]>::new_uninit_sliceRc<[MaybeUninit<T>]>::assume_initArc<T>::new_uninitArc<T>::assume_initArc<[T]>::new_uninit_sliceArc<[MaybeUninit<T>]>::assume_initBox<T>::new_uninitBox<T>::assume_initBox<[T]>::new_uninit_sliceBox<[MaybeUninit<T>]>::assume_initcore::arch::x86_64::_bextri_u64core::arch::x86_64::_bextri_u32core::arch::x86::_mm_broadcastsi128_si256core::arch::x86::_mm256_stream_load_si256core::arch::x86::_tzcnt_u16core::arch::x86::_mm_extracti_si64core::arch::x86::_mm_inserti_si64core::arch::x86::_mm_storeu_si16core::arch::x86::_mm_storeu_si32core::arch::x86::_mm_storeu_si64core::arch::x86::_mm_loadu_si16core::arch::x86::_mm_loadu_si32core::arch::wasm32::u8x16_relaxed_swizzlecore::arch::wasm32::i8x16_relaxed_swizzlecore::arch::wasm32::i32x4_relaxed_trunc_f32x4core::arch::wasm32::u32x4_relaxed_trunc_f32x4core::arch::wasm32::i32x4_relaxed_trunc_f64x2_zerocore::arch::wasm32::u32x4_relaxed_trunc_f64x2_zerocore::arch::wasm32::f32x4_relaxed_maddcore::arch::wasm32::f32x4_relaxed_nmaddcore::arch::wasm32::f64x2_relaxed_maddcore::arch::wasm32::f64x2_relaxed_nmaddcore::arch::wasm32::i8x16_relaxed_laneselectcore::arch::wasm32::u8x16_relaxed_laneselectcore::arch::wasm32::i16x8_relaxed_laneselectcore::arch::wasm32::u16x8_relaxed_laneselectcore::arch::wasm32::i32x4_relaxed_laneselectcore::arch::wasm32::u32x4_relaxed_laneselectcore::arch::wasm32::i64x2_relaxed_laneselectcore::arch::wasm32::u64x2_relaxed_laneselectcore::arch::wasm32::f32x4_relaxed_mincore::arch::wasm32::f32x4_relaxed_maxcore::arch::wasm32::f64x2_relaxed_mincore::arch::wasm32::f64x2_relaxed_maxcore::arch::wasm32::i16x8_relaxed_q15mulrcore::arch::wasm32::u16x8_relaxed_q15mulrcore::arch::wasm32::i16x8_relaxed_dot_i8x16_i7x16core::arch::wasm32::u16x8_relaxed_dot_i8x16_i7x16core::arch::wasm32::i32x4_relaxed_dot_i8x16_i7x16_addcore::arch::wasm32::u32x4_relaxed_dot_i8x16_i7x16_add
These APIs are now stable in const contexts:
std::task::Waker::from_rawstd::task::Context::from_wakerstd::task::Context::waker$integer::from_str_radixstd::num::ParseIntError::kind
Cargo
Compatibility Notes
- We now disallow setting some built-in cfgs via the command-line with the newly added
explicit_builtin_cfgs_in_flagslint in order to prevent incoherent state, eg.windowscfg active but target is Linux based. The appropriaterustcflag should be used instead. - The standard library has a new implementation of
binary_searchwhich is significantly improves performance (#128254). However when a sorted slice has multiple values which compare equal, the new implementation may select a different value among the equal ones than the old implementation. - illumos/Solaris now sets
MSG_NOSIGNALwhen writing to sockets. This avoids killing the process with SIGPIPE when writing to a closed socket, which matches the existing behavior on other UNIX targets. - Removes a problematic hack that always passed the --whole-archive linker flag for tests, which may cause linker errors for code accidentally relying on it.
- The WebAssembly target features
multivalueandreference-typesare now both enabled by default. These two features both have subtle changes implied for generated WebAssembly binaries. For themultivaluefeature, WebAssembly target support has changed when upgrading to LLVM 19. Support for generating functions with multiple returns no longer works and-Ctarget-feature=+multivaluehas a different meaning than it did in LLVM 18 and prior. There is no longer any supported means to generate a module that has a function with multiple returns in WebAssembly from Rust source code. For thereference-typesfeature the encoding of immediates in thecall_indirect, a commonly used instruction by the WebAssembly backend, has changed. Validators and parsers which don't understand thereference-typesproposal will no longer accept modules produced by LLVM due to this change in encoding of immediates. Additionally these features being enabled are encoded in thetarget_featurescustom section and may affect downstream tooling such aswasm-optconsuming the module. Generating a WebAssembly module that disables default features requires-Zbuild-stdsupport from Cargo and more information can be found at rust-lang/rust#128511. - Rust now raises unsafety errors for union patterns in parameter-position
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this MR and you won't be reminded about this update again.
- If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request
Pkgsrc changes:
- Adapt patches, apply to new vendored crates where needed.
- Back-port rust pull request 130110, "make dist vendoring configurable"
- Disable "dist vendoring", otherwise cargo would try to access the network during the build phase.
Upstream changes:
Version 1.82.0 (2024-10-17)
Language
- [Don't make statement nonterminals match pattern nonterminals] (rust-lang/rust#120221)
- [Patterns matching empty types can now be omitted in common cases] (rust-lang/rust#122792)
- [Enforce supertrait outlives obligations when using trait impls] (rust-lang/rust#124336)
- [
addr_of(_mut)!macros and the newly stabilized&raw (const|mut)are now safe to use with all static items] (rust-lang/rust#125834) - [size_of_val_raw: for length 0 this is safe to call] (rust-lang/rust#126152)
- [Reorder trait bound modifiers after
for<...>binder in trait bounds] (rust-lang/rust#127054) - [Stabilize opaque type precise capturing (RFC 3617)] (rust-lang/rust#127672)
- [Stabilize
&raw constand&raw mutoperators (RFC 2582)] (rust-lang/rust#127679) - [Stabilize unsafe extern blocks (RFC 3484)] (rust-lang/rust#127921)
- [Stabilize nested field access in
offset_of!] (rust-lang/rust#128284) - [Do not require
Tto be live when dropping[T; 0]] (rust-lang/rust#128438) - [Stabilize
constoperands in inline assembly] (rust-lang/rust#128570) - [Stabilize floating-point arithmetic in
const fn] (rust-lang/rust#128596) - [Stabilize explicit opt-in to unsafe attributes] (rust-lang/rust#128771)
- [Document NaN bit patterns guarantees] (rust-lang/rust#129559)
Compiler
- [Promote riscv64gc-unknown-linux-musl to tier 2] (rust-lang/rust#122049)
- [Promote Mac Catalyst targets
aarch64-apple-ios-macabiandx86_64-apple-ios-macabito Tier 2, and ship them with rustup] (rust-lang/rust#126450) - [Add tier 3 NuttX based targets for RISC-V and ARM] (rust-lang/rust#127755)
- [Add tier 3 powerpc-unknown-linux-muslspe target] (rust-lang/rust#127905)
- [Improved diagnostics to explain why a pattern is unreachable] (rust-lang/rust#128034)
- [The compiler now triggers the unreachable code warning properly
for async functions that don't return/are
-> !] (rust-lang/rust#128443) - [Promote
aarch64-apple-darwinto Tier 1] (rust-lang/rust#128592) - [Add Trusty OS target
aarch64-unknown-trustyandarmv7-unknown-trustyas tier 3 targets] (rust-lang/rust#129490) - [Promote
wasm32-wasip2to Tier 2.] (rust-lang/rust#126967)
Libraries
- [Generalize
{Rc,Arc}::make_mut()toPath,OsStr, andCStr.] (rust-lang/rust#126877)
Stabilized APIs
- [
std::thread::Builder::spawn_unchecked] (https://doc.rust-lang.org/stable/std/thread/struct.Builder.html#method.spawn_unchecked) - [
std::str::CharIndices::offset] (https://doc.rust-lang.org/nightly/std/str/struct.CharIndices.html#method.offset) - [
std::option::Option::is_none_or] (https://doc.rust-lang.org/nightly/std/option/enum.Option.html#method.is_none_or) - [
[T]::is_sorted] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted) - [
[T]::is_sorted_by] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted_by) - [
[T]::is_sorted_by_key] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted_by_key) - [
Iterator::is_sorted] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted) - [
Iterator::is_sorted_by] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted_by) - [
Iterator::is_sorted_by_key] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted_by_key) - [
std::future::Ready::into_inner] (https://doc.rust-lang.org/nightly/std/future/struct.Ready.html#method.into_inner) - [
std::iter::repeat_n] (https://doc.rust-lang.org/nightly/std/iter/fn.repeat_n.html) - [
impl<T: Clone> DoubleEndedIterator for Take<Repeat<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-DoubleEndedIterator-for-Take%3CRepeat%3CT%3E%3E) - [
impl<T: Clone> ExactSizeIterator for Take<Repeat<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-ExactSizeIterator-for-Take%3CRepeat%3CT%3E%3E) - [
impl<T: Clone> ExactSizeIterator for Take<RepeatWith<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-ExactSizeIterator-for-Take%3CRepeatWith%3CF%3E%3E) - [
impl Default for std::collections::binary_heap::Iter] (https://doc.rust-lang.org/nightly/std/collections/binary_heap/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E) - [
impl Default for std::collections::btree_map::RangeMut] (https://doc.rust-lang.org/nightly/std/collections/btree_map/struct.RangeMut.html#impl-Default-for-RangeMut%3C'_,+K,+V%3E) - [
impl Default for std::collections::btree_map::ValuesMut] (https://doc.rust-lang.org/nightly/std/collections/btree_map/struct.ValuesMut.html#impl-Default-for-ValuesMut%3C'_,+K,+V%3E) - [
impl Default for std::collections::vec_deque::Iter] (https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E) - [
impl Default for std::collections::vec_deque::IterMut] (https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.IterMut.html#impl-Default-for-IterMut%3C'_,+T%3E) - [
Rc<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit) - [
Rc<T>::assume_init] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init) - [
Rc<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit_slice) - [
Rc<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init-1) - [
Arc<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit) - [
Arc<T>::assume_init] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init) - [
Arc<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit_slice) - [
Arc<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init-1) - [
Box<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit) - [
Box<T>::assume_init] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init) - [
Box<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit_slice) - [
Box<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init-1) - [
core::arch::x86_64::_bextri_u64] (https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u64.html) - [
core::arch::x86_64::_bextri_u32] (https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u32.html) - [
core::arch::x86::_mm_broadcastsi128_si256] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_broadcastsi128_si256.html) - [
core::arch::x86::_mm256_stream_load_si256] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm256_stream_load_si256.html) - [
core::arch::x86::_tzcnt_u16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._tzcnt_u16.html) - [
core::arch::x86::_mm_extracti_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_extracti_si64.html) - [
core::arch::x86::_mm_inserti_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_inserti_si64.html) - [
core::arch::x86::_mm_storeu_si16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si16.html) - [
core::arch::x86::_mm_storeu_si32] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si32.html) - [
core::arch::x86::_mm_storeu_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si64.html) - [
core::arch::x86::_mm_loadu_si16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_loadu_si16.html) - [
core::arch::x86::_mm_loadu_si32] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_loadu_si32.html) - [
core::arch::wasm32::u8x16_relaxed_swizzle] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u8x16_relaxed_swizzle.html) - [
core::arch::wasm32::i8x16_relaxed_swizzle] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i8x16_relaxed_swizzle.html) - [
core::arch::wasm32::i32x4_relaxed_trunc_f32x4] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_trunc_f32x4.html) - [
core::arch::wasm32::u32x4_relaxed_trunc_f32x4] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_trunc_f32x4.html) - [
core::arch::wasm32::i32x4_relaxed_trunc_f64x2_zero] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_trunc_f64x2_zero.html) - [
core::arch::wasm32::u32x4_relaxed_trunc_f64x2_zero] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_trunc_f64x2_zero.html) - [
core::arch::wasm32::f32x4_relaxed_madd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_madd.html) - [
core::arch::wasm32::f32x4_relaxed_nmadd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_nmadd.html) - [
core::arch::wasm32::f64x2_relaxed_madd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_madd.html) - [
core::arch::wasm32::f64x2_relaxed_nmadd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_nmadd.html) - [
core::arch::wasm32::i8x16_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i8x16_relaxed_laneselect.html) - [
core::arch::wasm32::u8x16_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u8x16_relaxed_laneselect.html) - [
core::arch::wasm32::i16x8_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_laneselect.html) - [
core::arch::wasm32::u16x8_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_laneselect.html) - [
core::arch::wasm32::i32x4_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_laneselect.html) - [
core::arch::wasm32::u32x4_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_laneselect.html) - [
core::arch::wasm32::i64x2_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i64x2_relaxed_laneselect.html) - [
core::arch::wasm32::u64x2_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u64x2_relaxed_laneselect.html) - [
core::arch::wasm32::f32x4_relaxed_min] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_min.html) - [
core::arch::wasm32::f32x4_relaxed_max] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_max.html) - [
core::arch::wasm32::f64x2_relaxed_min] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_min.html) - [
core::arch::wasm32::f64x2_relaxed_max] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_max.html) - [
core::arch::wasm32::i16x8_relaxed_q15mulr] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_q15mulr.html) - [
core::arch::wasm32::u16x8_relaxed_q15mulr] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_q15mulr.html) - [
core::arch::wasm32::i16x8_relaxed_dot_i8x16_i7x16] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_dot_i8x16_i7x16.html) - [
core::arch::wasm32::u16x8_relaxed_dot_i8x16_i7x16] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_dot_i8x16_i7x16.html) - [
core::arch::wasm32::i32x4_relaxed_dot_i8x16_i7x16_add] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_dot_i8x16_i7x16_add.html) - [
core::arch::wasm32::u32x4_relaxed_dot_i8x16_i7x16_add] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_dot_i8x16_i7x16_add.html)
These APIs are now stable in const contexts:
- [
std::task::Waker::from_raw] (https://doc.rust-lang.org/nightly/std/task/struct.Waker.html#method.from_raw) - [
std::task::Waker::waker] (https://doc.rust-lang.org/nightly/std/task/struct.Waker.html#method.from_raw) - [
std::task::Context::from_waker] (https://doc.rust-lang.org/nightly/std/task/struct.Context.html#method.from_waker) - [
std::task::Context::waker] (https://doc.rust-lang.org/nightly/std/task/struct.Context.html#method.waker) - [
$integer::from_str_radix] (https://doc.rust-lang.org/nightly/std/primitive.u32.html#method.from_str_radix) - [
std::num::ParseIntError::kind] (https://doc.rust-lang.org/nightly/std/num/struct.ParseIntError.html#method.kind)
Cargo
- [feat: Add
infocargo subcommand] (rust-lang/cargo#14141)
Compatibility Notes
We now disallow setting some built-in cfgs via the command-line with the newly added [
explicit_builtin_cfgs_in_flags] (https://doc.rust-lang.org/rustc/lints/listing/deny-by-default.html#explicit-builtin-cfgs-in-flags) lint in order to prevent incoherent state, eg.windowscfg active but target is Linux based. The appropriate [rustcflag] (https://doc.rust-lang.org/rustc/command-line-arguments.html) should be used instead.The standard library has a new implementation of
binary_searchwhich is significantly improves performance (#128254). However when a sorted slice has multiple values which compare equal, the new implementation may select a different value among the equal ones than the old implementation.illumos/Solaris now sets
MSG_NOSIGNALwhen writing to sockets. This avoids killing the process with SIGPIPE when writing to a closed socket, which matches the existing behavior on other UNIX targets.[Removes a problematic hack that always passed the --whole-archive linker flag for tests, which may cause linker errors for code accidentally relying on it.] (rust-lang/rust#128400)
The WebAssembly target features
multivalueandreference-typesare now both enabled by default. These two features both have subtle changes implied for generated WebAssembly binaries. For themultivaluefeature, WebAssembly target support has changed when upgrading to LLVM 19. Support for generating functions with multiple returns no longer works and-Ctarget-feature=+multivaluehas a different meaning than it did in LLVM 18 and prior. There is no longer any supported means to generate a module that has a function with multiple returns in WebAssembly from Rust source code. For thereference-typesfeature the encoding of immediates in thecall_indirect, a commonly used instruction by the WebAssembly backend, has changed. Validators and parsers which don't understand thereference-typesproposal will no longer accept modules produced by LLVM due to this change in encoding of immediates. Additionally these features being enabled are encoded in thetarget_featurescustom section and may affect downstream tooling such aswasm-optconsuming the module. Generating a WebAssembly module that disables default features requires-Zbuild-stdsupport from Cargo and more information can be found at rust-lang/rust#128511.[Rust now raises unsafety errors for union patterns in parameter-position] (rust-lang/rust#130531)
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.
- [Update to LLVM 19] (rust-lang/rust#127513)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request
Pkgsrc changes:
- Adapt patches, apply to new vendored crates where needed.
- Back-port rust pull request 130110, "make dist vendoring configurable"
- Disable "dist vendoring", otherwise cargo would try to access the network during the build phase.
Upstream changes:
Version 1.81.0 (2024-09-05)
Language
- [Abort on uncaught panics in
extern "C"functions.] (rust-lang/rust#116088) - [Fix ambiguous cases of multiple
&in elided self lifetimes.] (rust-lang/rust#117967) - [Stabilize
#[expect]for lints (RFC 2383),] (rust-lang/rust#120924) like#[allow]with a warning if the lint is not fulfilled. - [Change method resolution to constrain hidden types instead of rejecting method candidates.] (rust-lang/rust#123962)
- [Bump
elided_lifetimes_in_associated_constantto deny.] (rust-lang/rust#124211) - [
offset_from: always allow pointers to point to the same address.] (rust-lang/rust#124921) - [Allow constraining opaque types during subtyping in the trait system.] (rust-lang/rust#125447)
- [Allow constraining opaque types during various unsizing casts.] (rust-lang/rust#125610)
- [Deny keyword lifetimes pre-expansion.] (rust-lang/rust#126762)
Compiler
- [Make casts of pointers to trait objects stricter.] (rust-lang/rust#120248)
- [Check alias args for well-formedness even if they have escaping bound vars.] (rust-lang/rust#123737)
- [Deprecate no-op codegen option
-Cinline-threshold=....] (rust-lang/rust#124712) - [Re-implement a type-size based limit.] (rust-lang/rust#125507)
- [Properly account for alignment in
transmutesize checks.] (rust-lang/rust#125740) - [Remove the
box_pointerslint.] (rust-lang/rust#126018) - [Ensure the interpreter checks bool/char for validity when they are used in a cast.] (rust-lang/rust#126265)
- [Improve coverage instrumentation for functions containing nested items.] (rust-lang/rust#127199)
- Target changes:
- [Add Tier 3
no_stdXtensa targets:] (rust-lang/rust#125141)xtensa-esp32-none-elf,xtensa-esp32s2-none-elf,xtensa-esp32s3-none-elf - [Add Tier 3
stdXtensa targets:] (rust-lang/rust#126380)xtensa-esp32-espidf,xtensa-esp32s2-espidf,xtensa-esp32s3-espidf - [Add Tier 3 i686 Redox OS target:]
(rust-lang/rust#126192)
i686-unknown-redox - [Promote
arm64ec-pc-windows-msvcto Tier 2.] (rust-lang/rust#126039) - [Promote
wasm32-wasip2to Tier 2.] (rust-lang/rust#126967) - [Promote
loongarch64-unknown-linux-muslto Tier 2 with host tools.] (rust-lang/rust#126298) - [Enable full tools and profiler for LoongArch Linux targets.] (rust-lang/rust#127078)
- [Unconditionally warn on usage of
wasm32-wasi.] (rust-lang/rust#126662) (see compatibility note below) - Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
- [Add Tier 3
Libraries
- [Split core's
PanicInfoand std'sPanicInfo.] (rust-lang/rust#115974) (see compatibility note below) - [Generalize
{Rc,Arc}::make_mut()to unsized types.] (rust-lang/rust#116113) - [Replace sort implementations with stable
driftsortand unstableipnsort.] (rust-lang/rust#124032) Allslice::sort*andslice::select_nth*methods are expected to see significant performance improvements. See the [research project] (https://github.com/Voultapher/sort-research-rs) for more details. - [Document behavior of
create_dir_allwith respect to empty paths.] (rust-lang/rust#125112) - [Fix interleaved output in the default panic hook when multiple threads panic simultaneously.] (rust-lang/rust#127397)
- Fix
Command's batch files argument escaping not working when file name has trailing whitespace or periods (CVE-2024-43402).
Stabilized APIs
- [
core::error] (https://doc.rust-lang.org/stable/core/error/index.html) - [
hint::assert_unchecked] (https://doc.rust-lang.org/stable/core/hint/fn.assert_unchecked.html) - [
fs::exists] (https://doc.rust-lang.org/stable/std/fs/fn.exists.html) - [
AtomicBool::fetch_not] (https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicBool.html#method.fetch_not) - [
Duration::abs_diff] (https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.abs_diff) - [
IoSlice::advance] (https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance) - [
IoSlice::advance_slices] (https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance_slices) - [
IoSliceMut::advance] (https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance) - [
IoSliceMut::advance_slices] (https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance_slices) - [
PanicHookInfo] (https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html) - [
PanicInfo::message] (https://doc.rust-lang.org/stable/core/panic/struct.PanicInfo.html#method.message) - [
PanicMessage] (https://doc.rust-lang.org/stable/core/panic/struct.PanicMessage.html)
These APIs are now stable in const contexts:
- [
char::from_u32_unchecked] (https://doc.rust-lang.org/stable/core/char/fn.from_u32_unchecked.html) (function) - [
char::from_u32_unchecked] (https://doc.rust-lang.org/stable/core/primitive.char.html#method.from_u32_unchecked) (method) - [
CStr::count_bytes] (https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.count_bytes) - [
CStr::from_ptr] (https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.from_ptr)
Cargo
- [Generated
.cargo_vcs_info.jsonis always included, even when--allow-dirtyis passed.] (rust-lang/cargo#13960) - [Disallow
package.license-fileandpackage.readmepointing to non-existent files during packaging.] (rust-lang/cargo#13921) - [Disallow passing
--release/--debugflag along with the--profileflag.] (rust-lang/cargo#13971) - [Remove
lib.pluginkey support inCargo.toml. Rust plugin support has been deprecated for four years and was removed in 1.75.0.] (rust-lang/cargo#13902)
Compatibility Notes
Usage of the
wasm32-wasitarget will now issue a compiler warning and request users switch to thewasm32-wasip1target instead. Both targets are the same,wasm32-wasiis only being renamed, and this [change to the WASI target] (https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html) is being done to enable removingwasm32-wasiin January 2025.We have renamed
std::panic::PanicInfotostd::panic::PanicHookInfo. The old name will continue to work as an alias, but will result in a deprecation warning starting in Rust 1.82.0.core::panic::PanicInfowill remain unchanged, however, as this is now a different type.The reason is that these types have different roles:
std::panic::PanicHookInfois the argument to the panic hook in std context (where panics can have an arbitrary payload), whilecore::panic::PanicInfois the argument to the#[panic_handler]in no_std context (where panics always carry a formatted message). Separating these types allows us to add more useful methods to these types, such asstd::panic::PanicHookInfo::payload_as_str()andcore::panic::PanicInfo::message().The new sort implementations may panic if a type's implementation of
Ord(or the given comparison function) does not implement a total order as the trait requires.Ord's supertraits (PartialOrd,Eq, andPartialEq) must also be consistent. The previous implementations would not "notice" any problem, but the new implementations have a good chance of detecting inconsistencies, throwing a panic rather than returning knowingly unsorted data.[In very rare cases, a change in the internal evaluation order of the trait solver may result in new fatal overflow errors.] (rust-lang/rust#126128)
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.
- [Add a Rust-for Linux
autoCI job to check kernel builds.] (rust-lang/rust#125209)
bors-ferrocene bot added a commit to ferrocene/ferrocene that referenced this pull request
1245: [1.83] Backport KP docs, release notes fix r=pietroalbini a=Hoverbear
Backports
Also backports rust-lang/rust@24906b5 which which upstream is also doing: rust-lang/rust#135934
In the case of 24906b5, this is somewhat of a special circumstance. We noticed during our own release process that our 1.81 (so 24.11) release notes had changed and this change (along with rust-lang/rust#126967 which was removed with rust-lang/rust#129995) had disappeared. We confirmed the fix for rust-lang/rust#129960 is indeed in tree, but upstream never ported the release note update to their main branch. This port is being done in rust-lang/rust#135934.
Co-authored-by: Pietro Albini pietro.albini@ferrous-systems.com
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request
Pkgsrc changes:
- Adapt patches, apply to new vendored crates where needed.
- Back-port rust pull request 130110, "make dist vendoring configurable"
- Disable "dist vendoring", otherwise cargo would try to access the network during the build phase.
- Dial down the verbosity of the build by dropping -v argument to x.py.
Upstream changes:
Version 1.82.0 (2024-10-17)
Language
- [Don't make statement nonterminals match pattern nonterminals] (rust-lang/rust#120221)
- [Patterns matching empty types can now be omitted in common cases] (rust-lang/rust#122792)
- [Enforce supertrait outlives obligations when using trait impls] (rust-lang/rust#124336)
- [
addr_of(_mut)!macros and the newly stabilized&raw (const|mut)are now safe to use with all static items] (rust-lang/rust#125834) - [size_of_val_raw: for length 0 this is safe to call] (rust-lang/rust#126152)
- [Reorder trait bound modifiers after
for<...>binder in trait bounds] (rust-lang/rust#127054) - [Stabilize opaque type precise capturing (RFC 3617)] (rust-lang/rust#127672)
- [Stabilize
&raw constand&raw mutoperators (RFC 2582)] (rust-lang/rust#127679) - [Stabilize unsafe extern blocks (RFC 3484)] (rust-lang/rust#127921)
- [Stabilize nested field access in
offset_of!] (rust-lang/rust#128284) - [Do not require
Tto be live when dropping[T; 0]] (rust-lang/rust#128438) - [Stabilize
constoperands in inline assembly] (rust-lang/rust#128570) - [Stabilize floating-point arithmetic in
const fn] (rust-lang/rust#128596) - [Stabilize explicit opt-in to unsafe attributes] (rust-lang/rust#128771)
- [Document NaN bit patterns guarantees] (rust-lang/rust#129559)
Compiler
- [Promote riscv64gc-unknown-linux-musl to tier 2] (rust-lang/rust#122049)
- [Promote Mac Catalyst targets
aarch64-apple-ios-macabiandx86_64-apple-ios-macabito Tier 2, and ship them with rustup] (rust-lang/rust#126450) - [Add tier 3 NuttX based targets for RISC-V and ARM] (rust-lang/rust#127755)
- [Add tier 3 powerpc-unknown-linux-muslspe target] (rust-lang/rust#127905)
- [Improved diagnostics to explain why a pattern is unreachable] (rust-lang/rust#128034)
- [The compiler now triggers the unreachable code warning properly
for async functions that don't return/are
-> !] (rust-lang/rust#128443) - [Promote
aarch64-apple-darwinto Tier 1] (rust-lang/rust#128592) - [Add Trusty OS target
aarch64-unknown-trustyandarmv7-unknown-trustyas tier 3 targets] (rust-lang/rust#129490) - [Promote
wasm32-wasip2to Tier 2.] (rust-lang/rust#126967)
Libraries
- [Generalize
{Rc,Arc}::make_mut()toPath,OsStr, andCStr.] (rust-lang/rust#126877)
Stabilized APIs
- [
std::thread::Builder::spawn_unchecked] (https://doc.rust-lang.org/stable/std/thread/struct.Builder.html#method.spawn_unchecked) - [
std::str::CharIndices::offset] (https://doc.rust-lang.org/nightly/std/str/struct.CharIndices.html#method.offset) - [
std::option::Option::is_none_or] (https://doc.rust-lang.org/nightly/std/option/enum.Option.html#method.is_none_or) - [
[T]::is_sorted] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted) - [
[T]::is_sorted_by] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted_by) - [
[T]::is_sorted_by_key] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted_by_key) - [
Iterator::is_sorted] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted) - [
Iterator::is_sorted_by] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted_by) - [
Iterator::is_sorted_by_key] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted_by_key) - [
std::future::Ready::into_inner] (https://doc.rust-lang.org/nightly/std/future/struct.Ready.html#method.into_inner) - [
std::iter::repeat_n] (https://doc.rust-lang.org/nightly/std/iter/fn.repeat_n.html) - [
impl<T: Clone> DoubleEndedIterator for Take<Repeat<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-DoubleEndedIterator-for-Take%3CRepeat%3CT%3E%3E) - [
impl<T: Clone> ExactSizeIterator for Take<Repeat<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-ExactSizeIterator-for-Take%3CRepeat%3CT%3E%3E) - [
impl<T: Clone> ExactSizeIterator for Take<RepeatWith<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-ExactSizeIterator-for-Take%3CRepeatWith%3CF%3E%3E) - [
impl Default for std::collections::binary_heap::Iter] (https://doc.rust-lang.org/nightly/std/collections/binary_heap/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E) - [
impl Default for std::collections::btree_map::RangeMut] (https://doc.rust-lang.org/nightly/std/collections/btree_map/struct.RangeMut.html#impl-Default-for-RangeMut%3C'_,+K,+V%3E) - [
impl Default for std::collections::btree_map::ValuesMut] (https://doc.rust-lang.org/nightly/std/collections/btree_map/struct.ValuesMut.html#impl-Default-for-ValuesMut%3C'_,+K,+V%3E) - [
impl Default for std::collections::vec_deque::Iter] (https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E) - [
impl Default for std::collections::vec_deque::IterMut] (https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.IterMut.html#impl-Default-for-IterMut%3C'_,+T%3E) - [
Rc<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit) - [
Rc<T>::assume_init] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init) - [
Rc<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit_slice) - [
Rc<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init-1) - [
Arc<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit) - [
Arc<T>::assume_init] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init) - [
Arc<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit_slice) - [
Arc<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init-1) - [
Box<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit) - [
Box<T>::assume_init] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init) - [
Box<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit_slice) - [
Box<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init-1) - [
core::arch::x86_64::_bextri_u64] (https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u64.html) - [
core::arch::x86_64::_bextri_u32] (https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u32.html) - [
core::arch::x86::_mm_broadcastsi128_si256] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_broadcastsi128_si256.html) - [
core::arch::x86::_mm256_stream_load_si256] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm256_stream_load_si256.html) - [
core::arch::x86::_tzcnt_u16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._tzcnt_u16.html) - [
core::arch::x86::_mm_extracti_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_extracti_si64.html) - [
core::arch::x86::_mm_inserti_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_inserti_si64.html) - [
core::arch::x86::_mm_storeu_si16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si16.html) - [
core::arch::x86::_mm_storeu_si32] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si32.html) - [
core::arch::x86::_mm_storeu_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si64.html) - [
core::arch::x86::_mm_loadu_si16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_loadu_si16.html) - [
core::arch::x86::_mm_loadu_si32] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_loadu_si32.html) - [
core::arch::wasm32::u8x16_relaxed_swizzle] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u8x16_relaxed_swizzle.html) - [
core::arch::wasm32::i8x16_relaxed_swizzle] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i8x16_relaxed_swizzle.html) - [
core::arch::wasm32::i32x4_relaxed_trunc_f32x4] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_trunc_f32x4.html) - [
core::arch::wasm32::u32x4_relaxed_trunc_f32x4] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_trunc_f32x4.html) - [
core::arch::wasm32::i32x4_relaxed_trunc_f64x2_zero] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_trunc_f64x2_zero.html) - [
core::arch::wasm32::u32x4_relaxed_trunc_f64x2_zero] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_trunc_f64x2_zero.html) - [
core::arch::wasm32::f32x4_relaxed_madd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_madd.html) - [
core::arch::wasm32::f32x4_relaxed_nmadd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_nmadd.html) - [
core::arch::wasm32::f64x2_relaxed_madd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_madd.html) - [
core::arch::wasm32::f64x2_relaxed_nmadd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_nmadd.html) - [
core::arch::wasm32::i8x16_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i8x16_relaxed_laneselect.html) - [
core::arch::wasm32::u8x16_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u8x16_relaxed_laneselect.html) - [
core::arch::wasm32::i16x8_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_laneselect.html) - [
core::arch::wasm32::u16x8_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_laneselect.html) - [
core::arch::wasm32::i32x4_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_laneselect.html) - [
core::arch::wasm32::u32x4_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_laneselect.html) - [
core::arch::wasm32::i64x2_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i64x2_relaxed_laneselect.html) - [
core::arch::wasm32::u64x2_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u64x2_relaxed_laneselect.html) - [
core::arch::wasm32::f32x4_relaxed_min] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_min.html) - [
core::arch::wasm32::f32x4_relaxed_max] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_max.html) - [
core::arch::wasm32::f64x2_relaxed_min] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_min.html) - [
core::arch::wasm32::f64x2_relaxed_max] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_max.html) - [
core::arch::wasm32::i16x8_relaxed_q15mulr] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_q15mulr.html) - [
core::arch::wasm32::u16x8_relaxed_q15mulr] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_q15mulr.html) - [
core::arch::wasm32::i16x8_relaxed_dot_i8x16_i7x16] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_dot_i8x16_i7x16.html) - [
core::arch::wasm32::u16x8_relaxed_dot_i8x16_i7x16] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_dot_i8x16_i7x16.html) - [
core::arch::wasm32::i32x4_relaxed_dot_i8x16_i7x16_add] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_dot_i8x16_i7x16_add.html) - [
core::arch::wasm32::u32x4_relaxed_dot_i8x16_i7x16_add] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_dot_i8x16_i7x16_add.html)
These APIs are now stable in const contexts:
- [
std::task::Waker::from_raw] (https://doc.rust-lang.org/nightly/std/task/struct.Waker.html#method.from_raw) - [
std::task::Waker::waker] (https://doc.rust-lang.org/nightly/std/task/struct.Waker.html#method.from_raw) - [
std::task::Context::from_waker] (https://doc.rust-lang.org/nightly/std/task/struct.Context.html#method.from_waker) - [
std::task::Context::waker] (https://doc.rust-lang.org/nightly/std/task/struct.Context.html#method.waker) - [
$integer::from_str_radix] (https://doc.rust-lang.org/nightly/std/primitive.u32.html#method.from_str_radix) - [
std::num::ParseIntError::kind] (https://doc.rust-lang.org/nightly/std/num/struct.ParseIntError.html#method.kind)
Cargo
- [feat: Add
infocargo subcommand] (rust-lang/cargo#14141)
Compatibility Notes
We now disallow setting some built-in cfgs via the command-line with the newly added [
explicit_builtin_cfgs_in_flags] (https://doc.rust-lang.org/rustc/lints/listing/deny-by-default.html#explicit-builtin-cfgs-in-flags) lint in order to prevent incoherent state, eg.windowscfg active but target is Linux based. The appropriate [rustcflag] (https://doc.rust-lang.org/rustc/command-line-arguments.html) should be used instead.The standard library has a new implementation of
binary_searchwhich is significantly improves performance (#128254). However when a sorted slice has multiple values which compare equal, the new implementation may select a different value among the equal ones than the old implementation.illumos/Solaris now sets
MSG_NOSIGNALwhen writing to sockets. This avoids killing the process with SIGPIPE when writing to a closed socket, which matches the existing behavior on other UNIX targets.[Removes a problematic hack that always passed the --whole-archive linker flag for tests, which may cause linker errors for code accidentally relying on it.] (rust-lang/rust#128400)
The WebAssembly target features
multivalueandreference-typesare now both enabled by default. These two features both have subtle changes implied for generated WebAssembly binaries. For themultivaluefeature, WebAssembly target support has changed when upgrading to LLVM 19. Support for generating functions with multiple returns no longer works and-Ctarget-feature=+multivaluehas a different meaning than it did in LLVM 18 and prior. There is no longer any supported means to generate a module that has a function with multiple returns in WebAssembly from Rust source code. For thereference-typesfeature the encoding of immediates in thecall_indirect, a commonly used instruction by the WebAssembly backend, has changed. Validators and parsers which don't understand thereference-typesproposal will no longer accept modules produced by LLVM due to this change in encoding of immediates. Additionally these features being enabled are encoded in thetarget_featurescustom section and may affect downstream tooling such aswasm-optconsuming the module. Generating a WebAssembly module that disables default features requires-Zbuild-stdsupport from Cargo and more information can be found at rust-lang/rust#128511.[Rust now raises unsafety errors for union patterns in parameter-position] (rust-lang/rust#130531)
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.
- [Update to LLVM 19] (rust-lang/rust#127513)
Labels
Area: The testsuite used to check the correctness of rustc
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)
Relevant to the infrastructure team, which will review and decide on the PR/issue.