Rust 1.79.0
Released on June 13, 2024
What's Changed
- 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
- 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. - 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.
- Implement
FromIteratorfor(impl Default + Extend, impl Default + Extend). - Implement
{Div,Rem}Assignon> X. - 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.
{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::NonZeropath::absoluteproc_macro::Literal::byte_characterproc_macro::Literal::c_stringAtomic*::into_innerio::Cursor::newio::Cursor::get_refio::Cursor::positionio::emptyio::repeatio::sinkpanic::Location::callerpanic::Location::filepanic::Location::linepanic::Location::column
- Update the minimum external LLVM to 17.
- [
RustcEncodableandRustcDecodableare soft-destabilized, to be removed - [The
wasm_c_abifuture-incompatibility lint will warn about use of the - Check return types of function types for well-formedness
Full Changelog
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 and match 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.
- Add aarch64-apple-visionos and aarch64-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, and x86_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 on X.
- 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
---------------
- <[T]>::split_at_mut_unchecked
- proc_macro::Literal::byte_character
- proc_macro::Literal::c_string
These APIs are now stable in const contexts:
- io::sink
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 and RustcDecodable 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.
Use wasm-bindgen v0.2.88 to generate forward-compatible bindings.