Rust 1.84.0
Released on January 9, 2025
What's Changed
- Allow
#[deny]inside#[forbid]as a no-op - 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
- 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
- Implement
From<&mut {slice}>forBox/Rc/Arc<{slice}> - Move
,::copysign ,::abs to::signum core - Add
LowerExpandUpperExpimplementations toNonZero - Implement
FromStrforCStringandTryFromforString std::os::darwinhas been made publicIpv6Addr::is_unique_localIpv6Addr::is_unicast_link_localcore::ptr::with_exposed_provenancecore::ptr::with_exposed_provenance_mut::addr ::expose_provenance ::with_addr ::map_addr ::isqrt ::checked_isqrt ::isqrt NonZero::isqrtcore::ptr::without_provenancecore::ptr::without_provenance_mutcore::ptr::danglingcore::ptr::dangling_mutPin::as_deref_mutAtomicBool::from_ptrAtomicPtr::from_ptrAtomicU8::from_ptrAtomicU16::from_ptrAtomicU32::from_ptrAtomicU64::from_ptrAtomicUsize::from_ptrAtomicI8::from_ptrAtomicI16::from_ptrAtomicI32::from_ptrAtomicI64::from_ptrAtomicIsize::from_ptr::is_null ::as_ref ::as_mut Pin::newPin::new_uncheckedPin::get_refPin::into_refPin::get_mutPin::get_unchecked_mutPin::static_refPin::static_mut
- 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
Full Changelog
Language
--------
- Allow #[deny] inside #[forbid] as a no-op
- 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
--------
- 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 , , 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_unicast_link_local
- core::ptr::with_exposed_provenance
- core::ptr::with_exposed_provenance_mut
-
-
-
- core::ptr::without_provenance
- core::ptr::without_provenance_mut
These APIs are now stable in const contexts
-
-
- Pin::new
Cargo
-----
- Stabilize MSRV-aware resolver config
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 next-generation trait solver is now enabled for coherence, fixing multiple soundness issues