Rust 1.80.0
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_pattern
feature - Guarantee layout and ABI of
Result
in 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_fallibles
lint to lint on fallibles behind references. - self-contained linker: retry linking without
-fuse-ld=lld
on 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_of
andsize_of_val
andalign_of
andalign_of_val
to 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_extension
would add a path separator - Add assert_unsafe_precondition to unchecked_{add,sub,neg,mul,shl,shr} methods
- Update
c_char
on AIX to use the correct type offset_of!
no longer returns a temporary- Handle sigma in
str.to_lowercase
correctly - Raise
DEFAULT_MIN_STACK_SIZE
to 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-cfg
as always enabled - Warn, rather than fail publish, if a target is excluded
- Add special
check-cfg
lint config for theunexpected_cfgs
lint - Stabilize
cargo update --precise <yanked>
- Don't change file permissions on
Cargo.toml
when usingcargo add
- Support using
cargo fix
on IPv6-only networks
Rustdoc
- Allow searching for references
- Stabilize
custom_code_classes_in_docs
feature - 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 theFn
family of traits- Warn (or error) when
Self
constructor from outer item is referenced in inner nested item - Turn
indirect_structural_match
andpointer_structural_match
lints into hard errors - Make
where_clause_object_safety
lint a regular object safety violation - Turn
proc_macro_back_compat
lint into a hard error. - Detect unused structs even when implementing private traits
std::sync::ReentrantLockGuard<T>
is no longerSync
ifT: !Sync
which meansstd::io::StdoutLock
andstd::io::StderrLock
are no longer Sync- Type inference will fail in some cases due to new implementations of
FromIterator for Box<str>
. Notably, this breaks versions of thetime
crate 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