1.80.0 #
- Released on: 25 July, 2024
- Branched from master on: 7 June, 2024
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>
- LazyCell
- LazyLock
- Duration::div_duration_f32
- Duration::div_duration_f64
- Option::take_if
- Seek::seek_relative
- BinaryHeap::as_slice
- NonNull::offset
- NonNull::byte_offset
- NonNull::add
- NonNull::byte_add
- NonNull::sub
- NonNull::byte_sub
- NonNull::offset_from
- NonNull::byte_offset_from
- NonNull::read
- NonNull::read_volatile
- NonNull::read_unaligned
- NonNull::write
- NonNull::write_volatile
- NonNull::write_unaligned
- NonNull::write_bytes
- NonNull::copy_to
- NonNull::copy_to_nonoverlapping
- NonNull::copy_from
- NonNull::copy_from_nonoverlapping
- NonNull::replace
- NonNull::swap
- NonNull::drop_in_place
- NonNull::align_offset
- <[T]>::split_at_checked
- <[T]>::split_at_mut_checked
- str::split_at_checked
- str::split_at_mut_checked
- str::trim_ascii
- str::trim_ascii_start
- str::trim_ascii_end
- <[u8]>::trim_ascii
- <[u8]>::trim_ascii_start
- <[u8]>::trim_ascii_end
- Ipv4Addr::BITS
- Ipv4Addr::to_bits
- Ipv4Addr::from_bits
- Ipv6Addr::BITS
- Ipv6Addr::to_bits
- Ipv6Addr::from_bits
- Vec::<[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 the- Fnfamily 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 longer- Syncif- T: !Syncwhich means- std::io::StdoutLockand- std::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