Update Apr 3, 2025 tracked by Updatify
Rust 1.86.0
Language
- Stabilize upcasting trait objects to supertraits.
-
Allow safe functions to be marked with the
#[target_feature]attribute. -
The
missing_abilint 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
-Oto mean-C opt-level=3instead of-C opt-level=2to match Cargo’s defaults. -
Fix emission of
overflowing_literalsunder certain macro environments.
Platform Support
-
Replace
i686-unknown-redoxtarget withi586-unknown-redox. -
Increase baseline CPU of
i686-unknown-hurd-gnuto Pentium 4. -
New tier 3 targets:
-
{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock. For supporting Neutrino QNX 7.1 withio-socketnetwork 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-msvcare 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 for more information on Rust’s tiered platform support.
Libraries
-
The type of
FromBytesWithNulErrorinCStr::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
RustcDecodableandRustcEncodable. -
Deprecate libtest’s
--logfileoption. -
On recent versions of Windows,
std::fs::remove_filewill 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
--packageand--workspaceare 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 loginto avoid shell history leaks. -
Simplify the implementation of
SourceIDcomparisons. This may potentially change behavior if the canonicalized URL compares differently in alternative registries.
Rustdoc
Compatibility Notes
-
The
wasm_c_abifuture compatibility warning is now a hard error. Users ofwasm-bindgenshould 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_casthas 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.