Version 1.79.0 (2024-06-13)
Language
- Stabilize inline
const {}expressions. - Prevent opaque types being instantiated twice with different regions within the same function.
- Stabilize WebAssembly target features that are in phase 4 and 5.
- Add the
redundant_lifetimeslint to detect lifetimes which are semantically redundant. - Stabilize the
unnameable_typeslint for public types that can't be named. - Enable debuginfo in macros, and stabilize
-C collapse-macro-debuginfoand#[collapse_debuginfo]. - Propagate temporary lifetime extension into
ifandmatchexpressions. - Restrict promotion of
const fncalls. - Warn against refining impls of crate-private traits with
refining_impl_traitlint. - Stabilize associated type bounds (RFC 2289).
- Stabilize importing
mainfrom other modules or crates. - Check return types of function types for well-formedness
- Rework
impl Traitlifetime inference - Change inductive trait solver cycles to be ambiguous
Compiler
- Define
-C stripto only affect binaries, not artifacts like.pdb. - Stabilize
-Crelro-levelfor controlling runtime link hardening. - Stabilize checking of
cfgnames and values at compile-time with--check-cfg. Note that this only stabilizes the compiler part, the Cargo part is still unstable in this release. - Add
aarch64-apple-visionosandaarch64-apple-visionos-simtier 3 targets. - Add
riscv32ima-unknown-none-elftier 3 target. - Promote several Windows targets to tier 2:
aarch64-pc-windows-gnullvm,i686-pc-windows-gnullvm, andx86_64-pc-windows-gnullvm.
Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
Libraries
- Implement
FromIteratorfor(impl Default + Extend, impl Default + Extend). - Implement
{Div,Rem}Assign<NonZero<X>>onX. - Document overrides of
clone_from()in core/std. - Link MSVC default lib in core.
- Caution against using
transmutebetween pointers and integers. - Enable frame pointers for the standard library.
Stabilized APIs
{integer}::unchecked_add{integer}::unchecked_mul{integer}::unchecked_sub<[T]>::split_at_unchecked<[T]>::split_at_mut_unchecked<[u8]>::utf8_chunksstr::Utf8Chunksstr::Utf8Chunk<*const T>::is_aligned<*mut T>::is_alignedNonNull::is_aligned<*const [T]>::len<*mut [T]>::len<*const [T]>::is_empty<*mut [T]>::is_emptyNonNull::<[T]>::is_emptyCStr::count_bytesio::Error::downcastnum::NonZero<T>path::absoluteproc_macro::Literal::byte_characterproc_macro::Literal::c_string
These APIs are now stable in const contexts:
Atomic*::into_innerio::Cursor::newio::Cursor::get_refio::Cursor::positionio::emptyio::repeatio::sinkpanic::Location::callerpanic::Location::filepanic::Location::linepanic::Location::column
Cargo
- Prevent dashes in
lib.name, always normalizing to_. - Stabilize MSRV-aware version requirement selection in
cargo add. - Switch to using
gitoxideby default for listing files.
Rustdoc
- Always display stability version even if it's the same as the containing item.
- Show a single search result for items with multiple paths.
- Support typing
/in docs to begin a search.
Misc
Compatibility Notes
- Update the minimum external LLVM to 17.
RustcEncodableandRustcDecodableare soft-destabilized, to be removed from the prelude in next edition.- The
wasm_c_abifuture-incompatibility lint will warn about use of the non-spec-compliant C ABI. Usewasm-bindgen v0.2.88to generate forward-compatible bindings. - Check return types of function types for well-formedness