Rust 1.76.0
Released on February 8, 2024
What's Changed
- Lint pinned
#[must_use]pointers (in particular,BoxwhereTis#[must_use]) inunused_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_typefield 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
- Add a column number to
dbg!() - Add
std::hash::{DefaultHasher, RandomState}exports - Fix rounding issue with exponents in fmt
- Add T: ?Sized to
RwLockReadGuardandRwLockWriteGuard's Debug impls. - Windows: Allow
File::createto work on hidden files Arc::unwrap_or_cloneRc::unwrap_or_cloneResult::inspectResult::inspect_errOption::inspecttype_name_of_valstd::hash::{DefaultHasher, RandomState}ptr::{from_ref, from_mut}ptr::addr_eq
- Add allow-by-default lint for unit bindings
- Remove x86_64-sun-solaris target.
- Remove asmjs-unknown-emscripten target
- Report errors in jobserver inherited through environment variables
- Update the minimum external LLVM to 16.
- Improve
print_tts - Make
IMPLIED_BOUNDS_ENTAILMENTinto a hard error from a lint - Vec's allocation behavior was changed when collecting some iterators
- Properly reject
defaulton free const items
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
---------------
- std::hash::{DefaultHasher, RandomState}
These were previously available only through std::collections::hash_map.
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.
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.
for more details.