← Back to all releases

Rust 1.76.0

Released on February 8, 2024

What's Changed

Full Changelog

Language

--------

- Document Rust ABI compatibility between various types

- Also: guarantee that char and u32 are ABI-compatible

- Add lint ambiguous_wide_pointer_comparisons that supersedes clippy::vtable_address_comparisons

Compiler

--------

- Lint pinned #[must_use] pointers (in particular, Box where T is #[must_use]) in unused_must_use.

- Soundness fix: fix computing the offset of an unsized field in a packed struct

- Soundness fix: fix dynamic size/align computation logic for packed types with dyn Trait tail

- Add $message_type field to distinguish json diagnostic outputs

- Enable Rust to use the EHCont security feature of Windows

- Add tier 3 {x86_64,i686}-win7-windows-msvc targets

- Add tier 3 aarch64-apple-watchos target

- Add tier 3 arm64e-apple-ios & arm64e-apple-darwin targets

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

for more information on Rust's tiered platform support.

Libraries

---------

- Add a column number to dbg!()

- Add std::hash::{DefaultHasher, RandomState} exports

- Fix rounding issue with exponents in fmt

- Add T: ?Sized to RwLockReadGuard and RwLockWriteGuard's Debug impls.

- Windows: Allow File::create to work on hidden files

Stabilized APIs

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

- Arc::unwrap_or_clone

- Rc::unwrap_or_clone

- Result::inspect

- Result::inspect_err

- Option::inspect

- type_name_of_val

- std::hash::{DefaultHasher, RandomState}

These were previously available only through std::collections::hash_map.

- ptr::{from_ref, from_mut}

- ptr::addr_eq

Cargo

-----

See Cargo release notes.

Rustdoc

-------

- Don't merge cfg and doc(cfg) attributes for re-exports

- rustdoc: allow resizing the sidebar / hiding the top bar

- rustdoc-search: add support for traits and associated types

- rustdoc: Add highlighting for comments in items declaration

Compatibility Notes

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

- Add allow-by-default lint for unit bindings

This is expected to be upgraded to a warning by default in a future Rust

release. Some macros emit bindings with type () with user-provided spans,

which means that this lint will warn for user code.

- Remove x86_64-sun-solaris target.

- Remove asmjs-unknown-emscripten target

- Report errors in jobserver inherited through environment variables

This may warn on benign problems too.

- Update the minimum external LLVM to 16.

- Improve print_tts

This change can break some naive manual parsing of token trees in proc macro

code which expect a particular structure after .to_string(), rather than just arbitrary Rust code.

- Make IMPLIED_BOUNDS_ENTAILMENT into a hard error from a lint

- Vec's allocation behavior was changed when collecting some iterators

Allocation behavior is currently not specified, nevertheless changes can be surprising.

See impl FromIterator for Vec

for more details.

- Properly reject default on free const items