← Back to all releases

Rust 1.79.0

Released on June 13, 2024

What's Changed

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.

Note that this only stabilizes the compiler part, the Cargo part is still unstable in this release.

- 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

---------------

- {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

- 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 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.

- Check return types of function types for well-formedness