Rust 1.80.0
Released on July 25, 2024
What's Changed
- 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
- 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 impl Default for Rcimpl Default for Rcimpl Default for Rc<[T]>impl Default for Arcimpl Default for Arcimpl Default for Arc<[T]>impl IntoIterator for Box<[T]>impl FromIteratorfor Box impl FromIteratorfor Box 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](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened) - [
<[[T; N]]>::as_flattened_mut](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened_mut) <[T]>::last_chunkBinaryHeap::new
- 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::ReentrantLockGuardis 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.
- Allow searching for references
- Stabilize
custom_code_classes_in_docsfeature - fix: In cross-crate scenarios show enum variants on type aliases of enums
- Misc improvements to size of generated html by rustdoc e.g. #124738 and #123734
- MSVC targets no longer depend on libc
Full Changelog
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 and size_of_val and align_of and align_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 IntoIterator for Box<[T]>
- LazyCell
- LazyLock
- NonNull::copy_to_nonoverlapping
- NonNull::copy_from_nonoverlapping
- Vec::<[T; N]>::into_flattened
- [<[[T; N]]>::as_flattened](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened)
- [<[[T; N]]>::as_flattened_mut](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.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 the unexpected_cfgs lint
- Stabilize cargo update --precise
- Don't change file permissions on Cargo.toml when using cargo 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 -
- Warn (or error) when Self constructor from outer item is referenced in inner nested item
- Turn indirect_structural_match and pointer_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 is no longer Sync if T: !Sync which means std::io::StdoutLock and std::io::StderrLock are no longer Sync
- Type inference will fail in some cases due to new implementations of FromIterator for Box.
Notably, this breaks versions of the time crate before 0.3.35, due to no longer inferring the implementation for Box<[_]>.
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