← Back to all releases

Rust 1.84.0

Released on January 9, 2025

What's Changed

Full Changelog

Language

--------

- Allow #[deny] inside #[forbid] as a no-op

- Show a warning when -Ctarget-feature is 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 for include!() 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

Compiler

--------

- Add --print host-tuple flag 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_cfgs lint to also warn in external macros

- Stabilize WebAssembly multivalue, reference-types, and tail-call target features

- Added Tier 2 support for the wasm32v1-none target

Libraries

---------

- Implement From<&mut {slice}> for Box/Rc/Arc<{slice}>

- Move ::copysign, ::abs, ::signum to core

- Add LowerExp and UpperExp implementations to NonZero

- Implement FromStr for CString and TryFrom for String

- std::os::darwin has been made public

Stabilized APIs

---------------

- Ipv6Addr::is_unique_local

- Ipv6Addr::is_unicast_link_local

- core::ptr::with_exposed_provenance

- core::ptr::with_exposed_provenance_mut

- ::addr

- ::expose_provenance

- ::with_addr

- ::map_addr

- ::isqrt

- ::checked_isqrt

- ::isqrt

- NonZero::isqrt

- core::ptr::without_provenance

- core::ptr::without_provenance_mut

- core::ptr::dangling

- core::ptr::dangling_mut

- Pin::as_deref_mut

These APIs are now stable in const contexts

- 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

- ::is_null

- ::as_ref

- ::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

Cargo

-----

- Stabilize MSRV-aware resolver config

- Stabilize resolver v3

Rustdoc

-------

- rustdoc-search: improve type-driven search

Compatibility Notes

-------------------

- Enable by default the LSX target feature for LoongArch Linux targets

- The unstable -Zprofile flag (“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-wasi has been removed as the target is now named wasm32-wasip1. This completes the transition plan for this target following the introduction of wasm32-wasip1 in Rust 1.78. Compiler warnings on use of wasm32-wasi introduced in Rust 1.81 are now gone as well as the target is removed.

- The syntax &pin (mut|const) T is now parsed as a type which in theory could affect macro expansion results in some edge cases

- Legacy syntax for calling std::arch functions 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