Version 1.80.0 (2024-07-25)
Language
- Document maximum allocation size
- Allow zero-byte offsets and ZST read/writes on arbitrary pointers
- Support C23's variadics without a named parameter
- Stabilize
exclusive_range_patternfeature - Guarantee layout and ABI of
Resultin some scenarios
Compiler
- Update cc crate to v1.0.97 allowing additional spectre mitigations on MSVC targets
- Allow field reordering on types marked
repr(packed(1)) - Add a lint against never type fallback affecting unsafe code
- Disallow cast with trailing braced macro in let-else
- Expand
for_loops_over_fallibleslint to lint on fallibles behind references. - self-contained linker: retry linking without
-fuse-ld=lldon CCs that don't support it - Do not parse CVarArgs (
...) as a type in trait bounds - Improvements to LLDB formatting #124458 #124500
- For the wasm32-wasip2 target default to PIC and do not use
-fuse-ld=lld - Add x86_64-unknown-linux-none as a tier 3 target
- Lint on
foo.into_iter()resolving to&Box<[T]>: IntoIterator
Libraries
- Add
size_ofandsize_of_valandalign_ofandalign_of_valto the prelude - Abort a process when FD ownership is violated
- io::Write::write_fmt: panic if the formatter fails when the stream does not fail
- Panic if
PathBuf::set_extensionwould add a path separator - Add assert_unsafe_precondition to unchecked_{add,sub,neg,mul,shl,shr} methods
- Update
c_charon AIX to use the correct type offset_of!no longer returns a temporary- Handle sigma in
str.to_lowercasecorrectly - Raise
DEFAULT_MIN_STACK_SIZEto at least 64KiB
Stabilized APIs
impl Default for Rc<CStr>impl Default for Rc<str>impl Default for Rc<[T]>impl Default for Arc<str>impl Default for Arc<CStr>impl Default for Arc<[T]>impl IntoIterator for Box<[T]>impl FromIterator<String> for Box<str>impl FromIterator<char> for Box<str>LazyCellLazyLockDuration::div_duration_f32Duration::div_duration_f64Option::take_ifSeek::seek_relativeBinaryHeap::as_sliceNonNull::offsetNonNull::byte_offsetNonNull::addNonNull::byte_addNonNull::subNonNull::byte_subNonNull::offset_fromNonNull::byte_offset_fromNonNull::readNonNull::read_volatileNonNull::read_unalignedNonNull::writeNonNull::write_volatileNonNull::write_unalignedNonNull::write_bytesNonNull::copy_toNonNull::copy_to_nonoverlappingNonNull::copy_fromNonNull::copy_from_nonoverlappingNonNull::replaceNonNull::swapNonNull::drop_in_placeNonNull::align_offset<[T]>::split_at_checked<[T]>::split_at_mut_checkedstr::split_at_checkedstr::split_at_mut_checkedstr::trim_asciistr::trim_ascii_startstr::trim_ascii_end<[u8]>::trim_ascii<[u8]>::trim_ascii_start<[u8]>::trim_ascii_endIpv4Addr::BITSIpv4Addr::to_bitsIpv4Addr::from_bitsIpv6Addr::BITSIpv6Addr::to_bitsIpv6Addr::from_bitsVec::<[T; N]>::into_flattened<[[T; N]]>::as_flattened<[[T; N]]>::as_flattened_mut
These APIs are now stable in const contexts:
Cargo
- Stabilize
-Zcheck-cfgas always enabled - Warn, rather than fail publish, if a target is excluded
- Add special
check-cfglint config for theunexpected_cfgslint - Stabilize
cargo update --precise <yanked> - Don't change file permissions on
Cargo.tomlwhen usingcargo add - Support using
cargo fixon IPv6-only networks
Rustdoc
- Allow searching for references
- Stabilize
custom_code_classes_in_docsfeature - fix: In cross-crate scenarios show enum variants on type aliases of enums
Compatibility Notes
- rustfmt estimates line lengths differently when using non-ascii characters
- Type aliases are now handled correctly in orphan check
- Allow instructing rustdoc to read from stdin via
- std::env::{set_var, remove_var}can no longer be converted to safe function pointers and no longer implement theFnfamily of traits- Warn (or error) when
Selfconstructor from outer item is referenced in inner nested item - Turn
indirect_structural_matchandpointer_structural_matchlints into hard errors - Make
where_clause_object_safetylint a regular object safety violation - Turn
proc_macro_back_compatlint into a hard error. - Detect unused structs even when implementing private traits
std::sync::ReentrantLockGuard<T>is no longerSyncifT: !Syncwhich meansstd::io::StdoutLockandstd::io::StderrLockare no longer Sync- Type inference will fail in some cases due to new implementations of
FromIterator for Box<str>. Notably, this breaks versions of thetimecrate before 0.3.35, due to no longer inferring the implementation forBox<[_]>.
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.
- Misc improvements to size of generated html by rustdoc e.g. #124738 and #123734
- MSVC targets no longer depend on libc