Rust versions / 1.84
Rust release · Jan 9, 2025
Rust 1.84: what's new, what was stabilized
Short answerRust 1.84 was released on Jan 9, 2025: 2 language stabilizations (Stabilize s390x inline assembly); 40 newly stable APIs (Ipv6Addr::is_unique_local, Ipv6Addr::is_unicast_link_local, core::ptr::with_exposed_provenance, core::ptr::with_exposed_provenance_mut, ...); 7 compatibility notes that can affect existing code. Point release: 1.84.1 (Jan 30, 2025).
← Rust 1.83All versionsRust 1.85 →
Language features stabilized
- Stabilize s390x inline assembly
- Stabilize Arm64EC inline assembly
40 APIs stabilized
Ipv6Addr::is_unique_local, Ipv6Addr::is_unicast_link_local, core::ptr::with_exposed_provenance, core::ptr::with_exposed_provenance_mut, <ptr>::addr, <ptr>::expose_provenance, <ptr>::with_addr, <ptr>::map_addr, <int>::isqrt, <int>::checked_isqrt, <uint>::isqrt, NonZero::isqrt, core::ptr::without_provenance, core::ptr::without_provenance_mut, core::ptr::dangling, core::ptr::dangling_mut, Pin::as_deref_mut, AtomicBool::from_ptr, AtomicPtr::from_ptr, AtomicU8::from_ptr, AtomicU16::from_ptr, AtomicU32::from_ptr, AtomicU64::from_ptr, AtomicUsize::from_ptr, AtomicI8::from_ptr, AtomicI16::from_ptr, AtomicI32::from_ptr, AtomicI64::from_ptr, AtomicIsize::from_ptr, <ptr>::is_null, <ptr>::as_ref, <ptr>::as_mut, Pin::new, Pin::new_unchecked, Pin::get_ref, Pin::into_ref, Pin::get_mut, Pin::get_unchecked_mut, Pin::static_ref, Pin::static_mut
Can it break my build?
The release lists these compatibility notes. Most only affect rare code, but read them before you raise your toolchain in CI:
- Enable by default the
LSXtarget feature for LoongArch Linux targets - The unstable
-Zprofileflag (“gcov-style” coverage instrumentation) has been removed. This does not affect the stable flags for coverage instrumentation (-Cinstrument-coverage) and profile-guided optimization (-Cprofile-generate,-Cprofile-use), which are unrelated and remain available. - Support for the target named
wasm32-wasihas been removed as the target is now namedwasm32-wasip1. This completes the transition plan for this target following the introduction ofwasm32-wasip1in Rust 1.78. Compiler warnings on use ofwasm32-wasiintroduced in Rust 1.81 are now gone as well as the target is removed. - The syntax
&pin (mut|const) Tis now parsed as a type which in theory could affect macro expansion results in some edge cases - Legacy syntax for calling
std::archfunctions is no longer permitted to declare items or bodies (such as closures, inline consts, or async blocks). - Declaring functions with a calling convention not supported on the current target now triggers a hard error
- The next-generation trait solver is now enabled for coherence, fixing multiple soundness issues
Use it
rustup update stable # get the newest release
rustup install 1.84 # or exactly this one
rustup override set 1.84 # pin a project to itTo require at least this version from users of your crate, set rust-version = "1.84" under [package] in Cargo.toml. Cargo then refuses to build it on older compilers with a clear message, and with resolver 3 (the default on the 2024 edition, Rust 1.85+) it also prefers dependency versions that support it.
Full release notes
Language
- [Allow
#[deny]inside#[forbid]as a no-op](https://github.com/rust-lang/rust/pull/121560/) - Show a warning when
-Ctarget-featureis used to toggle features that can lead to unsoundness due to ABI mismatches - Use the next-generation trait solver in coherence
- Allow coercions to drop the principal of trait objects
- Support
/as the path separator forinclude!()in all cases on Windows - Taking a raw ref (
raw (const|mut)) of a deref of a pointer (*ptr) is now safe - Stabilize s390x inline assembly
- Stabilize Arm64EC inline assembly
- Lint against creating pointers to immediately dropped temporaries
- Execute drop glue when unwinding in an
extern "C"function
<a id="1.84.0-Compiler"></a>
Compiler
- Add
--print host-tupleflag to print the host target tuple and affirm the "target tuple" terminology over "target triple" - Declaring functions with a calling convention not supported on the current target now triggers a hard error
- Set up indirect access to external data for
loongarch64-unknown-linux-{musl,ohos} - Enable XRay instrumentation for LoongArch Linux targets
- Extend the
unexpected_cfgslint to also warn in external macros - Stabilize WebAssembly
multivalue,reference-types, andtail-calltarget features - Added Tier 2 support for the
wasm32v1-nonetarget
<a id="1.84.0-Libraries"></a>
Libraries
- Implement
From<&mut {slice}>forBox/Rc/Arc<{slice}> - Move
<float>::copysign,<float>::abs,<float>::signumtocore - Add
LowerExpandUpperExpimplementations toNonZero - Implement
FromStrforCStringandTryFrom<CString>forString std::os::darwinhas been made public
<a id="1.84.0-Stabilized-APIs"></a>
Stabilized APIs
Ipv6Addr::is_unique_localIpv6Addr::is_unicast_link_localcore::ptr::with_exposed_provenancecore::ptr::with_exposed_provenance_mut<ptr>::addr<ptr>::expose_provenance<ptr>::with_addr<ptr>::map_addr<int>::isqrt<int>::checked_isqrt<uint>::isqrtNonZero::isqrtcore::ptr::without_provenancecore::ptr::without_provenance_mutcore::ptr::danglingcore::ptr::dangling_mutPin::as_deref_mut
These APIs are now stable in const contexts
AtomicBool::from_ptrAtomicPtr::from_ptrAtomicU8::from_ptrAtomicU16::from_ptrAtomicU32::from_ptrAtomicU64::from_ptrAtomicUsize::from_ptrAtomicI8::from_ptrAtomicI16::from_ptrAtomicI32::from_ptrAtomicI64::from_ptrAtomicIsize::from_ptr<ptr>::is_null<ptr>::as_ref<ptr>::as_mutPin::newPin::new_uncheckedPin::get_refPin::into_refPin::get_mutPin::get_unchecked_mutPin::static_refPin::static_mut
<a id="1.84.0-Cargo"></a>
Cargo
<a id="1.84-Rustdoc"></a>
Rustdoc
<a id="1.84.0-Compatibility-Notes"></a>
Compatibility Notes
- Enable by default the
LSXtarget feature for LoongArch Linux targets - The unstable
-Zprofileflag (“gcov-style” coverage instrumentation) has been removed. This does not affect the stable flags for coverage instrumentation (-Cinstrument-coverage) and profile-guided optimization (-Cprofile-generate,-Cprofile-use), which are unrelated and remain available. - Support for the target named
wasm32-wasihas been removed as the target is now namedwasm32-wasip1. This completes the transition plan for this target following the introduction ofwasm32-wasip1in Rust 1.78. Compiler warnings on use ofwasm32-wasiintroduced in Rust 1.81 are now gone as well as the target is removed. - The syntax
&pin (mut|const) Tis now parsed as a type which in theory could affect macro expansion results in some edge cases - Legacy syntax for calling
std::archfunctions is no longer permitted to declare items or bodies (such as closures, inline consts, or async blocks). - Declaring functions with a calling convention not supported on the current target now triggers a hard error
- The next-generation trait solver is now enabled for coherence, fixing multiple soundness issues
1.84.1 (Jan 30, 2025)
<a id="1.84.1"></a>
- Fix ICE 132920 in duplicate-crate diagnostics.
- Fix errors for overlapping impls in incremental rebuilds.
- Fix slow compilation related to the next-generation trait solver.
- Fix debuginfo when LLVM's location discriminator value limit is exceeded.
- Fixes for building Rust from source:
- Only try to distribute
llvm-objcopyif llvm tools are enabled. - Add Profile Override for Non-Git Sources.
- Resolve symlinks of LLVM tool binaries before copying them.
- Make it possible to use ci-rustc on tarball sources.
Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.
Up next
Next releaseRust 1.85Released Feb 20, 2025.Read it next →Also worth your time
Did this answer your question?