Rust versions / 1.79
Rust release · Jun 13, 2024
Rust 1.79: what's new, what was stabilized
Short answerRust 1.79 was released on Jun 13, 2024: 5 language stabilizations (Stabilize inline const {} expressions.); 33 newly stable APIs ({integer}::unchecked_add, {integer}::unchecked_mul, {integer}::unchecked_sub, <[T]>::split_at_unchecked, ...); 4 compatibility notes that can affect existing code.
← Rust 1.78All versionsRust 1.80 →
Language features stabilized
- Stabilize inline const {} expressions.
- Stabilize WebAssembly target features that are in phase 4 and 5.
- Stabilize the unnameable_types lint for public types that can't be named.
- Stabilize associated type bounds (RFC 2289).
- Stabilize importing main from other modules or crates.
33 APIs stabilized
{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, 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
Can it break my build?
The release lists these compatibility notes. Most only affect rare code, but read them before you raise your toolchain in CI:
- 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
Use it
rustup update stable # get the newest release
rustup install 1.79 # or exactly this one
rustup override set 1.79 # pin a project to itTo require at least this version from users of your crate, set rust-version = "1.79" under [package] in Cargo.toml. Cargo then refuses to build it on older compilers with a clear message, and with resolver 3 (the default on the 2024 edition, Rust 1.85+) it also prefers dependency versions that support it.
Full release notes
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].](https://github.com/rust-lang/rust/pull/120845/) - 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
<a id="1.79.0-Compiler"></a>
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.
<a id="1.79.0-Libraries"></a>
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.
<a id="1.79.0-Stabilized-APIs"></a>
Stabilized APIs
{integer}::unchecked_add{integer}::unchecked_mul{integer}::unchecked_sub- [
<[T]>::split_at_unchecked](https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_at_unchecked) - [
<[T]>::split_at_mut_unchecked](https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_at_mut_unchecked) - [
<[u8]>::utf8_chunks](https://doc.rust-lang.org/stable/core/primitive.slice.html#method.utf8_chunks) str::Utf8Chunksstr::Utf8Chunk<*const T>::is_aligned<*mut T>::is_alignedNonNull::is_aligned- [
<*const [T]>::len](https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.len) - [
<*mut [T]>::len](https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.len-1) - [
<*const [T]>::is_empty](https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.is_empty) - [
<*mut [T]>::is_empty](https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.is_empty-1) - [
NonNull::<[T]>::is_empty](https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.is_empty) CStr::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
<a id="1.79.0-Cargo"></a>
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.
<a id="1.79.0-Rustdoc"></a>
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.
<a id="1.79.0-Misc"></a>
Misc
<a id="1.79.0-Compatibility-Notes"></a>
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
Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.
Up next
Next releaseRust 1.80Released Jul 25, 2024.Read it next →Also worth your time
Did this answer your question?