Make the wasm_c_abi future compat warning a hard error by bjorn3 · Pull Request #133951 · rust-lang/rust (original) (raw)
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 is the next step in getting rid of the broken C abi for wasm32-unknown-unknown.
The lint was made deny-by-default in #129534 3 months ago. This still keeps the -Zwasm-c-abi
flag set to legacy
by default. It will be flipped in a future PR.
cc #122532
Target: WASM (WebAssembly), http://webassembly.org/
Area: Concerning the application binary interface (ABI)
labels
This comment has been minimized.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I should note that the changes in #129534 did not actually start showing an error to users, it was still a warning by default.
See #129534 (comment)
rustbot added the T-compiler
Relevant to the compiler team, which will review and decide on the PR/issue.
label
Technically we are breaking like ~85 versions of a foundation ecosystem crate, so yeah, an FCP might be warranted, but also technically we're just fixing a bug.
If we do this, we should make sure we only do one FCP between this and #133952 though since they're the same decision: "We're killing this dead, yeah?"
Nominating for T-compiler:
We already accepted the MCP to phase out this behavior, but this is the "hard break" edge. If an FCP is desired before proceeding, now is the time to decide. We are technically breaking a crate on future versions of Rust. However it is the crate and target's maintainer wish that we do so, and this is the solution to a 4 year old issue:
We have heard no strong objection and this has been discussed for 4 years at this point, so any box-ticking formality is exactly that: a formality.
@rustbot label: +I-compiler-nominated
Also cc @daxpedda
Discussed in T-compiler triage on Zulip.
Even if it's just a sign-off, we want to loop in T-lang, seems the usual procedure for them is to FCP such changes.
@rustbot label -I-compiler-nominated +I-lang-easy-decision
To summarize even more summarily for T-lang:
extern "C" fn
on wasm32 targets has used a creative ABI that emerged because Rust and C toolchain development were more historically contemporary to each other, as opposed to the usual "first C, then 10~40 years later, Rust". Unfortunately, wasm-bindgen needed something for a stable-ish wasm ABI to talk to JavaScript. A flawed lowering was written. It was not immediately fixed because fixing it would break wasm-bindgen. For a while the wasm32-unknown-emscripten target was an acceptable workaround, and in a nascent ecosystem which might have further growing pains, the next move was not obvious.
Things have settled and it has become clear that Rust should align the ABI of extern "C" fn
with that used by C toolchains for other wasm32 targets.
Thanks to @alexcrichton and @daxpedda we have implemented a relatively-smooth migration path for wasm-bindgen. There should be no meaningful concerns going forward, and this will make code that wasn't compatible with C code be compatible again, according to the conventional understanding of extern "C" fn
.
If I understand correctly, people who want to use the new interoperable ABI between C and Rust on WebAssembly will need to either use some flavor of wasi target or use some hypothetical new -none
target that we don't yet have?
Or is the migration plan here to wait some amount of time with this as a hard error and then change it to the new ABI?
I might be misunderstanding something here, but I would have expected a change in tests/ui
for this? What's the code that used to emit "future compat" and now would, or that no longer mentions the "because this lint is on by default" because it's a hard error not a lint?
We discussed in today's lang team meeting and were confused what exactly we are rubber stamping here. Specifically, we wanted to know:
Does this break any use of extern "C"
on wasm32-unknown-unknown
target? What action is the user expected to take when we break them?
Also echoing @scottmcm's point that a test change would be ideal.
If I understand correctly, people who want to use the new interoperable ABI between C and Rust on WebAssembly will need to either use some flavor of wasi target or use some hypothetical new -none target that we don't yet have?
That is the precise opposite of the situation.
@workingjubilee came to the @rust-lang/lang meeting and explained the situation in great detail.
It sounds like this hard error will happen for people using old wasm-bindgen, and people using new wasm-bindgen will have things Just Work.
Thanks to @workingjubilee for joining the call and clarifying the situation for us.
The current situation is that extern "C"
with wasm32-unknown-unknown
works with old versions of wasm-bindgen
, but it's broken and we lint against this. People who want this to work correctly today with new versions of wasm-bindgen
have to pass the -Zwasm-c-abi
flag. What this change does is to make that -Zwasm-c-abi
flag the default so that users doing extern "C"
with new versions of wasm-bindgen
will find things to just work.
Since there would otherwise be subtle breakage for people using old versions of wasm-bindgen
, this includes a heuristic to hopefully provide a hard error in those cases.
On that basis...
@rfcbot fcp merge
This is the next step in getting rid of the broken C abi for wasm32-unknown-unknown.
Co-Authored-By: Alex Crichton alex@alexcrichton.com
Thank you everyone!
@bors r+
📌 Commit 49c3aaa has been approved by workingjubilee
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
bors added a commit to rust-lang-ci/rust that referenced this pull request
Rollup of 7 pull requests
Successful merges:
- rust-lang#130808 (Fix linking for symbols starting with ? on i686-pc-windows-msvc)
- rust-lang#133138 (Target modifiers (special marked options) are recorded in metainfo)
- rust-lang#133154 (Reword resolve errors caused by likely missing crate in dep tree)
- rust-lang#135707 (Shorten linker output even more when
--verbose
is not present) - rust-lang#135764 (Fix tests on LLVM 20)
- rust-lang#135785 (use
PassMode::Direct
for vector types ons390x
) - rust-lang#135818 (tests: Port
translation
to rmake.rs)
Failed merges:
- rust-lang#133951 (Make the wasm_c_abi future compat warning a hard error)
r? @ghost
@rustbot
modify labels: rollup
try-job: aarch64-apple try-job: i686-mingw try-job: x86_64-gnu-llvm-19-3
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request
… r=workingjubilee
Make the wasm_c_abi future compat warning a hard error
This is the next step in getting rid of the broken C abi for wasm32-unknown-unknown.
The lint was made deny-by-default in rust-lang#129534 3 months ago. This still keeps the -Zwasm-c-abi
flag set to legacy
by default. It will be flipped in a future PR.
bors added a commit to rust-lang-ci/rust that referenced this pull request
bors added a commit to rust-lang-ci/rust that referenced this pull request
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request
… r=workingjubilee
Make the wasm_c_abi future compat warning a hard error
This is the next step in getting rid of the broken C abi for wasm32-unknown-unknown.
The lint was made deny-by-default in rust-lang#129534 3 months ago. This still keeps the -Zwasm-c-abi
flag set to legacy
by default. It will be flipped in a future PR.
bors added a commit to rust-lang-ci/rust that referenced this pull request
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
Rollup merge of rust-lang#133951 - bjorn3:wasm_c_abi_lint_hard_error, r=workingjubilee
Make the wasm_c_abi future compat warning a hard error
This is the next step in getting rid of the broken C abi for wasm32-unknown-unknown.
The lint was made deny-by-default in rust-lang#129534 3 months ago. This still keeps the -Zwasm-c-abi
flag set to legacy
by default. It will be flipped in a future PR.
bjorn3 deleted the wasm_c_abi_lint_hard_error branch
Mark-Simulacrum added the relnotes
Marks issues that should be documented in the release notes of the next release.
label
@@ -143,7 +143,6 @@ declare_lint_pass! { |
---|
UNUSED_VARIABLES, |
USELESS_DEPRECATED, |
WARNINGS, |
WASM_C_ABI, |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FYI whenever removing something from this list, it must be added to the removed lint list. There is a comment above the list explaining that.
//! When removing a lint, make sure to also add a call to `register_removed` in
//! compiler/rustc_lint/src/lib.rs.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My bad. In any case #138601 added another lint that is more thorough than the lint that was removed in this PR.
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request
Upstream changes relative to 1.85.1:
Version 1.86.0 (2025-04-03)
Language
- [Stabilize upcasting trait objects to supertraits.] (rust-lang/rust#134367)
- [Allow safe functions to be marked with the
#[target_feature]
attribute.] (rust-lang/rust#134090) - [The
missing_abi
lint now warns-by-default.] (rust-lang/rust#132397) - Rust now lints about double negations, to catch cases that might
have intended to be a prefix decrement operator (
--x
) as written in other languages. This was previously a clippy lint,clippy::double_neg
, and is [now available directly in Rust asdouble_negations
.] (rust-lang/rust#126604) - [More pointers are now detected as definitely not-null based on their alignment in const eval.] (rust-lang/rust#133700)
- [Empty
repr()
attribute applied to invalid items are now correctly rejected.] (rust-lang/rust#133925) - [Inner attributes
#![test]
and#![rustfmt::skip]
are no longer accepted in more places than intended.] (rust-lang/rust#134276)
Compiler
- [Debug-assert that raw pointers are non-null on access.] (rust-lang/rust#134424)
- [Change
-O
to mean-C opt-level=3
instead of-C opt-level=2
to match Cargo's defaults.] (rust-lang/rust#135439) - [Fix emission of
overflowing_literals
under certain macro environments.] (rust-lang/rust#136393)
Platform Support
- [Replace
i686-unknown-redox
target withi586-unknown-redox
.] (rust-lang/rust#136698) - [Increase baseline CPU of
i686-unknown-hurd-gnu
to Pentium 4.] (rust-lang/rust#136700) - New tier 3 targets:
- [
{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock
] (rust-lang/rust#133631). For supporting Neutrino QNX 7.1 withio-socket
network stack. - [
{aarch64-unknown,x86_64-pc}-nto-qnx800
] (rust-lang/rust#133631). For supporting Neutrino QNX 8.0 (no_std
-only). - [
{x86_64,i686}-win7-windows-gnu
] (rust-lang/rust#134609). Intended for backwards compatibility with Windows 7.{x86_64,i686}-win7-windows-msvc
are the Windows MSVC counterparts that already exist as Tier 3 targets. amdgcn-amd-amdhsa
.x86_64-pc-cygwin
.- [
{mips,mipsel}-mti-none-elf
] (rust-lang/rust#135074). Initial bare-metal support. m68k-unknown-none-elf
.- [
armv7a-nuttx-{eabi,eabihf}
,aarch64-unknown-nuttx
, andthumbv7a-nuttx-{eabi,eabihf}
] (rust-lang/rust#135757).
- [
Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
Libraries
- The type of
FromBytesWithNulError
inCStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>
was [changed from an opaque struct to an enum] (rust-lang/rust#134143), allowing users to examine why the conversion failed. - [Remove
RustcDecodable
andRustcEncodable
.] (rust-lang/rust#134272) - [Deprecate libtest's
--logfile
option.] (rust-lang/rust#134283) - [On recent versions of Windows,
std::fs::remove_file
will now remove read-only files.] (rust-lang/rust#134679)
Stabilized APIs
- [
{float}::next_down
] (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_down) - [
{float}::next_up
] (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_up) - [
<[_]>::get_disjoint_mut
] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_mut) - [
<[_]>::get_disjoint_unchecked_mut
] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_unchecked_mut) - [
slice::GetDisjointMutError
] (https://doc.rust-lang.org/stable/std/slice/enum.GetDisjointMutError.html) - [
HashMap::get_disjoint_mut
] (https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_mut) - [
HashMap::get_disjoint_unchecked_mut
] (https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_unchecked_mut) - [
NonZero::count_ones
] (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.count_ones) - [
Vec::pop_if
] (https://doc.rust-lang.org/std/vec/struct.Vec.html#method.pop_if) - [
sync::Once::wait
] (https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait) - [
sync::Once::wait_force
] (https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait_force) - [
sync::OnceLock::wait
] (https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html#method.wait)
These APIs are now stable in const contexts:
- [
hint::black_box
] (https://doc.rust-lang.org/stable/std/hint/fn.black_box.html) - [
io::Cursor::get_mut
] (https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_mut) - [
io::Cursor::set_position
] (https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.set_position) - [
str::is_char_boundary
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.is_char_boundary) - [
str::split_at
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at) - [
str::split_at_checked
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_checked) - [
str::split_at_mut
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut) - [
str::split_at_mut_checked
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut_checked)
Cargo
- [When merging, replace rather than combine configuration keys that refer to a program path and its arguments.] (rust-lang/cargo#15066)
- [Error if both
--package
and--workspace
are passed but the requested package is missing.] (rust-lang/cargo#15071) This was previously silently ignored, which was considered a bug since missing packages should be reported. - [Deprecate the token argument in
cargo login
to avoid shell history leaks.] (rust-lang/cargo#15057) - [Simplify the implementation of
SourceID
comparisons.] (rust-lang/cargo#14980) This may potentially change behavior if the canonicalized URL compares differently in alternative registries.
Rustdoc
- [Add a sans-serif font setting.] (rust-lang/rust#133636)
Compatibility Notes
- [The
wasm_c_abi
future compatibility warning is now a hard error.] (rust-lang/rust#133951) Users ofwasm-bindgen
should upgrade to at least version 0.2.89, otherwise compilation will fail. - [Remove long-deprecated no-op attributes
#![no_start]
and#![crate_id]
.] (rust-lang/rust#134300) - [The future incompatibility lint
cenum_impl_drop_cast
has been made into a hard error.] (rust-lang/rust#135964) This means it is now an error to cast a field-less enum to an integer if the enum implementsDrop
. - [SSE2 is now required for "i686" 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually.] (rust-lang/rust#137037) To compile for pre-SSE2 32-bit x86, use a "i586" target instead.
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.
- [Build the rustc on AArch64 Linux with ThinLTO + PGO.] (rust-lang/rust#133807) The ARM 64-bit compiler (AArch64) on Linux is now optimized with ThinLTO and PGO, similar to the optimizations we have already performed for the x86-64 compiler on Linux. This should make it up to 30% faster.
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request
This MR contains the following updates:
Package | Update | Change |
---|---|---|
rust | minor | 1.85.1 -> 1.86.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.86.0
==========================
Language
- Stabilize upcasting trait objects to supertraits.
- Allow safe functions to be marked with the
#[target_feature]
attribute. - The
missing_abi
lint now warns-by-default. - Rust now lints about double negations, to catch cases that might have intended to be a prefix decrement operator (
--x
) as written in other languages. This was previously a clippy lint,clippy::double_neg
, and is now available directly in Rust asdouble_negations
. - More pointers are now detected as definitely not-null based on their alignment in const eval.
- Empty
repr()
attribute applied to invalid items are now correctly rejected. - Inner attributes
#![test]
and#![rustfmt::skip]
are no longer accepted in more places than intended.
Compiler
- Debug-assert that raw pointers are non-null on access.
- Change
-O
to mean-C opt-level=3
instead of-C opt-level=2
to match Cargo's defaults. - Fix emission of
overflowing_literals
under certain macro environments.
Platform Support
- Replace
i686-unknown-redox
target withi586-unknown-redox
. - Increase baseline CPU of
i686-unknown-hurd-gnu
to Pentium 4. - New tier 3 targets:
{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock
. For supporting Neutrino QNX 7.1 withio-socket
network stack.{aarch64-unknown,x86_64-pc}-nto-qnx800
. For supporting Neutrino QNX 8.0 (no_std
-only).{x86_64,i686}-win7-windows-gnu
. Intended for backwards compatibility with Windows 7.{x86_64,i686}-win7-windows-msvc
are the Windows MSVC counterparts that already exist as Tier 3 targets.amdgcn-amd-amdhsa
.x86_64-pc-cygwin
.{mips,mipsel}-mti-none-elf
. Initial bare-metal support.m68k-unknown-none-elf
.armv7a-nuttx-{eabi,eabihf}
,aarch64-unknown-nuttx
, andthumbv7a-nuttx-{eabi,eabihf}
.
Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
Libraries
- The type of
FromBytesWithNulError
inCStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>
was changed from an opaque struct to an enum, allowing users to examine why the conversion failed. - Remove
RustcDecodable
andRustcEncodable
. - Deprecate libtest's
--logfile
option. - On recent versions of Windows,
std::fs::remove_file
will now remove read-only files.
Stabilized APIs
{float}::next_down
{float}::next_up
<[_]>::get_disjoint_mut
<[_]>::get_disjoint_unchecked_mut
slice::GetDisjointMutError
HashMap::get_disjoint_mut
HashMap::get_disjoint_unchecked_mut
NonZero::count_ones
Vec::pop_if
sync::Once::wait
sync::Once::wait_force
sync::OnceLock::wait
These APIs are now stable in const contexts:
hint::black_box
io::Cursor::get_mut
io::Cursor::set_position
str::is_char_boundary
str::split_at
str::split_at_checked
str::split_at_mut
str::split_at_mut_checked
Cargo
- When merging, replace rather than combine configuration keys that refer to a program path and its arguments.
- Error if both
--package
and--workspace
are passed but the requested package is missing. This was previously silently ignored, which was considered a bug since missing packages should be reported. - Deprecate the token argument in
cargo login
to avoid shell history leaks. - Simplify the implementation of
SourceID
comparisons. This may potentially change behavior if the canonicalized URL compares differently in alternative registries.
Rustdoc
Compatibility Notes
- The
wasm_c_abi
future compatibility warning is now a hard error. Users ofwasm-bindgen
should upgrade to at least version 0.2.89, otherwise compilation will fail. - Remove long-deprecated no-op attributes
#![no_start]
and#![crate_id]
. - The future incompatibility lint
cenum_impl_drop_cast
has been made into a hard error. This means it is now an error to cast a field-less enum to an integer if the enum implementsDrop
. - SSE2 is now required for "i686" 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually. To compile for pre-SSE2 32-bit x86, use a "i586" target instead.
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.
- Build the rustc on AArch64 Linux with ThinLTO + PGO. The ARM 64-bit compiler (AArch64) on Linux is now optimized with ThinLTO and PGO, similar to the optimizations we have already performed for the x86-64 compiler on Linux. This should make it up to 30% faster.
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.
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request
Pkgsrc changes:
- Drop support for building now old 1.76.0 rust natively on 32-bit NetBSD arm ports, pushing those to use the rust-bin variant instead.
- Use of newer GCC on NetBSD/powerpc turned out to not be required, given that your kernel and user-land is new enough. >= 10.0 release?
- Checksum updates.
Upstream changes:
Version 1.86.0 (2025-04-03)
Language
- [Stabilize upcasting trait objects to supertraits.] (rust-lang/rust#134367)
- [Allow safe functions to be marked with the
#[target_feature]
attribute.] (rust-lang/rust#134090) - [The
missing_abi
lint now warns-by-default.] (rust-lang/rust#132397) - Rust now lints about double negations, to catch cases that might
have intended to be a prefix decrement operator (
--x
) as written in other languages. This was previously a clippy lint,clippy::double_neg
, and is [now available directly in Rust asdouble_negations
.] (rust-lang/rust#126604) - [More pointers are now detected as definitely not-null based on their alignment in const eval.] (rust-lang/rust#133700)
- [Empty
repr()
attribute applied to invalid items are now correctly rejected.] (rust-lang/rust#133925) - [Inner attributes
#![test]
and#![rustfmt::skip]
are no longer accepted in more places than intended.] (rust-lang/rust#134276)
Compiler
- [Debug-assert that raw pointers are non-null on access.] (rust-lang/rust#134424)
- [Change
-O
to mean-C opt-level=3
instead of-C opt-level=2
to match Cargo's defaults.] (rust-lang/rust#135439) - [Fix emission of
overflowing_literals
under certain macro environments.] (rust-lang/rust#136393)
Platform Support
- [Replace
i686-unknown-redox
target withi586-unknown-redox
.] (rust-lang/rust#136698) - [Increase baseline CPU of
i686-unknown-hurd-gnu
to Pentium 4.] (rust-lang/rust#136700) - New tier 3 targets:
- [
{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock
] (rust-lang/rust#133631). For supporting Neutrino QNX 7.1 withio-socket
network stack. - [
{aarch64-unknown,x86_64-pc}-nto-qnx800
] (rust-lang/rust#133631). For supporting Neutrino QNX 8.0 (no_std
-only). - [
{x86_64,i686}-win7-windows-gnu
] (rust-lang/rust#134609). Intended for backwards compatibility with Windows 7.{x86_64,i686}-win7-windows-msvc
are the Windows MSVC counterparts that already exist as Tier 3 targets. amdgcn-amd-amdhsa
.x86_64-pc-cygwin
.- [
{mips,mipsel}-mti-none-elf
] (rust-lang/rust#135074). Initial bare-metal support. m68k-unknown-none-elf
.- [
armv7a-nuttx-{eabi,eabihf}
,aarch64-unknown-nuttx
, andthumbv7a-nuttx-{eabi,eabihf}
] (rust-lang/rust#135757).
- [
Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
Libraries
- The type of
FromBytesWithNulError
inCStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>
was [changed from an opaque struct to an enum] (rust-lang/rust#134143), allowing users to examine why the conversion failed. - [Remove
RustcDecodable
andRustcEncodable
.] (rust-lang/rust#134272) - [Deprecate libtest's
--logfile
option.] (rust-lang/rust#134283) - [On recent versions of Windows,
std::fs::remove_file
will now remove read-only files.] (rust-lang/rust#134679)
Stabilized APIs
- [
{float}::next_down
] (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_down) - [
{float}::next_up
] (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_up) - [
<[_]>::get_disjoint_mut
] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_mut) - [
<[_]>::get_disjoint_unchecked_mut
] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_unchecked_mut) - [
slice::GetDisjointMutError
] (https://doc.rust-lang.org/stable/std/slice/enum.GetDisjointMutError.html) - [
HashMap::get_disjoint_mut
] (https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_mut) - [
HashMap::get_disjoint_unchecked_mut
] (https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_unchecked_mut) - [
NonZero::count_ones
] (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.count_ones) - [
Vec::pop_if
] (https://doc.rust-lang.org/std/vec/struct.Vec.html#method.pop_if) - [
sync::Once::wait
] (https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait) - [
sync::Once::wait_force
] (https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait_force) - [
sync::OnceLock::wait
] (https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html#method.wait)
These APIs are now stable in const contexts:
- [
hint::black_box
] (https://doc.rust-lang.org/stable/std/hint/fn.black_box.html) - [
io::Cursor::get_mut
] (https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_mut) - [
io::Cursor::set_position
] (https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.set_position) - [
str::is_char_boundary
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.is_char_boundary) - [
str::split_at
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at) - [
str::split_at_checked
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_checked) - [
str::split_at_mut
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut) - [
str::split_at_mut_checked
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut_checked)
Cargo
- [When merging, replace rather than combine configuration keys that refer to a program path and its arguments.] (rust-lang/cargo#15066)
- [Error if both
--package
and--workspace
are passed but the requested package is missing.] (rust-lang/cargo#15071) This was previously silently ignored, which was considered a bug since missing packages should be reported. - [Deprecate the token argument in
cargo login
to avoid shell history leaks.] (rust-lang/cargo#15057) - [Simplify the implementation of
SourceID
comparisons.] (rust-lang/cargo#14980) This may potentially change behavior if the canonicalized URL compares differently in alternative registries.
Rustdoc
- [Add a sans-serif font setting.] (rust-lang/rust#133636)
Compatibility Notes
- [The
wasm_c_abi
future compatibility warning is now a hard error.] (rust-lang/rust#133951) Users ofwasm-bindgen
should upgrade to at least version 0.2.89, otherwise compilation will fail. - [Remove long-deprecated no-op attributes
#![no_start]
and#![crate_id]
.] (rust-lang/rust#134300) - [The future incompatibility lint
cenum_impl_drop_cast
has been made into a hard error.] (rust-lang/rust#135964) This means it is now an error to cast a field-less enum to an integer if the enum implementsDrop
. - [SSE2 is now required for "i686" 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually.] (rust-lang/rust#137037) To compile for pre-SSE2 32-bit x86, use a "i586" target instead.
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.
- [Build the rustc on AArch64 Linux with ThinLTO + PGO.] (rust-lang/rust#133807) The ARM 64-bit compiler (AArch64) on Linux is now optimized with ThinLTO and PGO, similar to the optimizations we have already performed for the x86-64 compiler on Linux. This should make it up to 30% faster.
Labels
Area: Concerning the application binary interface (ABI)
This issue / PR is in PFCP or FCP with a disposition to merge it.
The final comment period is finished for this PR / Issue.
Issue: The decision needed by the team is conjectured to be easy; this does not imply nomination
Target: WASM (WebAssembly), http://webassembly.org/
Marks issues that should be documented in the release notes of the next release.
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Relevant to the language team