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_lifetimes
lint to detect lifetimes which are semantically redundant. - Stabilize the
unnameable_types
lint for public types that can't be named. - Enable debuginfo in macros, and stabilize
-C collapse-macro-debuginfo
and#[collapse_debuginfo]
. - Propagate temporary lifetime extension into
if
andmatch
expressions. - Restrict promotion of
const fn
calls. - Warn against refining impls of crate-private traits with
refining_impl_trait
lint. - Stabilize associated type bounds (RFC 2289).
- Stabilize importing
main
from other modules or crates. - Check return types of function types for well-formedness
- Rework
impl Trait
lifetime inference - Change inductive trait solver cycles to be ambiguous
Compiler
- Define
-C strip
to only affect binaries, not artifacts like.pdb
. - Stabilize
-Crelro-level
for controlling runtime link hardening. - Stabilize checking of
cfg
names 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-visionos
andaarch64-apple-visionos-sim
tier 3 targets. - Add
riscv32ima-unknown-none-elf
tier 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
FromIterator
for(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
transmute
between 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_chunks
str::Utf8Chunks
str::Utf8Chunk
<*const T>::is_aligned
<*mut T>::is_aligned
NonNull::is_aligned
<*const [T]>::len
<*mut [T]>::len
<*const [T]>::is_empty
<*mut [T]>::is_empty
NonNull::<[T]>::is_empty
CStr::count_bytes
io::Error::downcast
num::NonZero<T>
path::absolute
proc_macro::Literal::byte_character
proc_macro::Literal::c_string
These APIs are now stable in const contexts:
Atomic*::into_inner
io::Cursor::new
io::Cursor::get_ref
io::Cursor::position
io::empty
io::repeat
io::sink
panic::Location::caller
panic::Location::file
panic::Location::line
panic::Location::column
Cargo
- Prevent dashes in
lib.name
, always normalizing to_
. - Stabilize MSRV-aware version requirement selection in
cargo add
. - Switch to using
gitoxide
by 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.
RustcEncodable
andRustcDecodable
are soft-destabilized, to be removed from the prelude in next edition.- The
wasm_c_abi
future-incompatibility lint will warn about use of the non-spec-compliant C ABI. Usewasm-bindgen v0.2.88
to generate forward-compatible bindings. - Check return types of function types for well-formedness