Update Jul 25, 2024 tracked by Updatify
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_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 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