← Back to all releases

Rust 1.77.0

Released on March 21, 2024

What's Changed

Full Changelog

Language

--------

- Reveal opaque types within the defining body for exhaustiveness checking.

- Stabilize C-string literals.

- Stabilize THIR unsafeck.

- Add lint static_mut_refs to warn on references to mutable statics.

- Support async recursive calls (as long as they have indirection).

- Undeprecate lint unstable_features and make use of it in the compiler.

- Make inductive cycles in coherence ambiguous always.

- Get rid of type-driven traversal in const-eval interning,

only as a future compatibility lint for now.

- Deny braced macro invocations in let-else.

Compiler

--------

- Include lint soft_unstable in future breakage reports.

- Make i128 and u128 16-byte aligned on x86-based targets.

- Use --verbose in diagnostic output.

- Improve spacing between printed tokens.

- Merge the unused_tuple_struct_fields lint into dead_code.

- Error on incorrect implied bounds in well-formedness check,

with a temporary exception for Bevy.

- Fix coverage instrumentation/reports for non-ASCII source code.

- Fix fn/const items implied bounds and well-formedness check.

- Promote riscv32{im|imafc}-unknown-none-elf targets to tier 2.

- Add several new tier 3 targets:

- aarch64-unknown-illumos

- hexagon-unknown-none-elf

- riscv32imafc-esp-espidf

- riscv32im-risc0-zkvm-elf

Refer to Rust's [platform support page][platform-support-doc]

for more information on Rust's tiered platform support.

Libraries

---------

- Implement From<&[T; N]> for Cow<[T]>.

- Remove special-case handling of vec.split_off(0).

Stabilized APIs

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

- array::each_ref

- array::each_mut

- core::net

- f32::round_ties_even

- f64::round_ties_even

- mem::offset_of!

- slice::first_chunk

- slice::first_chunk_mut

- slice::split_first_chunk

- slice::split_first_chunk_mut

- slice::last_chunk

- slice::last_chunk_mut

- slice::split_last_chunk

- slice::split_last_chunk_mut

- slice::chunk_by

- slice::chunk_by_mut

- Bound::map

- File::create_new

- Mutex::clear_poison

- RwLock::clear_poison

Cargo

-----

- Extend the build directive syntax with cargo::.

- Stabilize metadata id format as PackageIDSpec.

- Pull out cargo-util-schemas as a crate.

- Strip all debuginfo when debuginfo is not requested.

- Inherit jobserver from env for all kinds of runners.

- Deprecate rustc plugin support in cargo.

Rustdoc

-----

- Allows links in markdown headings.

- Search for tuples and unit by type with ().

- Clean up the source sidebar's hide button.

- Prevent JS injection from localStorage.

Misc

----

- Recommend version-sorting for all sorting in style guide.

Internal Changes

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

These changes do not affect any public interfaces of Rust, but they represent

significant improvements to the performance or internals of rustc and related

tools.

- Add more weirdness to weird-exprs.rs.