Language
- Lower pattern bindings in the order they're written and base drop order on primary bindings' order
- Stabilize declaration of C-style variadic functions for sysv64,win64,efiapi, andaapcsABIs. This brings these ABIs in line with the C ABI: variadic functions can be declared in extern blocks but not defined.
- Add dangling_pointers_from_localslint to warn against dangling pointers from local variables
- Upgrade semicolon_in_expressions_from_macrosfrom warn to deny
- Stabilize LoongArch32 inline assembly
- Add warn-by-default integer_to_ptr_transmuteslint against integer-to-pointer transmutes
- Stabilize sse4aandtbmtarget features
- Add target_env = "macabi"andtarget_env = "sim"cfgs as replacements for thetarget_abicfgs with the same values.
Compiler
Platform Support
- Promote aarch64-pc-windows-gnullvmandx86_64-pc-windows-gnullvmto Tier 2 with host tools. Note: llvm-tools and MSI installers are missing but will be added in future releases.
- Promote aarch64-pc-windows-msvcto Tier 1
Refer to Rust's platform support page for more information on Rust's tiered platform support.
Libraries
- Print thread ID in panic message
- Fix overly restrictive lifetime in core::panic::Location::filereturn type
- Guarantee parameter order for _by()variants ofmin/max/minmaxinstd::cmp
- Document assumptions about CloneandEqtraits
- std::thread: Return error if setting thread stack size fails This used to panic within the standard library.
Stabilized APIs
- Path::file_prefix
- AtomicPtr::fetch_ptr_add
- AtomicPtr::fetch_ptr_sub
- AtomicPtr::fetch_byte_add
- AtomicPtr::fetch_byte_sub
- AtomicPtr::fetch_or
- AtomicPtr::fetch_and
- AtomicPtr::fetch_xor
- {integer}::strict_add
- {integer}::strict_sub
- {integer}::strict_mul
- {integer}::strict_div
- {integer}::strict_div_euclid
- {integer}::strict_rem
- {integer}::strict_rem_euclid
- {integer}::strict_neg
- {integer}::strict_shl
- {integer}::strict_shr
- {integer}::strict_pow
- i{N}::strict_add_unsigned
- i{N}::strict_sub_unsigned
- i{N}::strict_abs
- u{N}::strict_add_signed
- u{N}::strict_sub_signed
- PanicHookInfo::payload_as_str
- core::iter::chain
- u{N}::checked_signed_diff
- core::array::repeat
- PathBuf::add_extension
- PathBuf::with_added_extension
- Duration::from_mins
- Duration::from_hours
- impl PartialEq<str> for PathBuf
- impl PartialEq<String> for PathBuf
- impl PartialEq<str> for Path
- impl PartialEq<String> for Path
- impl PartialEq<PathBuf> for String
- impl PartialEq<Path> for String
- impl PartialEq<PathBuf> for str
- impl PartialEq<Path> for str
- Ipv4Addr::from_octets
- Ipv6Addr::from_octets
- Ipv6Addr::from_segments
- impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
- impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
- impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
- Cell::as_array_of_cells
- u{N}::carrying_add
- u{N}::borrowing_sub
- u{N}::carrying_mul
- u{N}::carrying_mul_add
- BTreeMap::extract_if
- BTreeSet::extract_if
- impl Debug for windows::ffi::EncodeWide<'_>
- str::ceil_char_boundary
- str::floor_char_boundary
- impl Sum for Saturating<u{N}>
- impl Sum<&Self> for Saturating<u{N}>
- impl Product for Saturating<u{N}>
- impl Product<&Self> for Saturating<u{N}>
These previously stable APIs are now stable in const contexts:
- <[T; N]>::each_ref
- <[T; N]>::each_mut
- OsString::new
- PathBuf::new
- TypeId::of
- ptr::with_exposed_provenance
- ptr::with_exposed_provenance_mut
Cargo
- 🎉 Stabilize build.build-dir. This config sets the directory where intermediate build artifacts are stored. These artifacts are produced by Cargo and rustc during the build process. End users usually won't need to interact with them, and the layout insidebuild-diris an implementation detail that may change without notice. (config doc) (build cache doc) #15833 #15840
- The --targetflag and thebuild.targetconfiguration can now take literal"host-tuple"string, which will internally be substituted by the host machine's target triple. #15838 #16003 #16032
Rustdoc
- In search results, rank doc aliases lower than non-alias items with the same name
- Raw pointers now work in type-based search like references. This means you can now search for things like *const u8 ->, and additionally functions that take or return raw pointers will now display their signature properly in search results.
Compatibility Notes
- Always require coroutine captures to be drop-live
- Apple: Always pass SDK root when linking with cc, and pass it viaSDKROOTenv var. This should fix linking issues withrustcrunning inside Xcode. Libraries in/usr/local/libmay no longer be linked automatically, if you develop or use a crate that relies on this, you should explicitly setcargo::rustc-link-search=/usr/local/libin abuild.rsscript.
- Relaxed bounds in associated type bound position like in TraitRef<AssocTy: ?Sized>are now correctly forbidden
- Add unstable #[sanitize(xyz = "on|off")]built-in attribute that shadows procedural macros with the same name
- Fix the drop checker being more permissive for bindings declared with let-else
- Be more strict when parsing attributes, erroring on many invalid attributes
- Mark all deprecation lints in name resolution as deny-by-default and also report in dependencies
- The lint semicolon_in_expressions_from_macros, formacro_rules!macros in expression position that expand to end in a semicolon (;), is now deny-by-default. It was already warn-by-default, and a future compatibility warning (FCW) that warned even in dependencies. This lint will become a hard error in the future.
- Trait impl modifiers (e.g., unsafe,!,default) in inherent impls are no longer syntactically valid
- Start reporting future breakage for ill_formed_attribute_inputin dependencies
- Restrict the scope of temporaries created by the macros pin!,format_args!,write!, andwriteln!inif letscrutinees in Rust Edition 2024. This applies Rust Edition 2024'sif lettemporary scope rules to these temporaries, which previously could live past theifexpression regardless of Edition.
- Invalid numeric literal suffixes in tuple indexing, tuple struct indexing, and struct field name positions are now correctly rejected
- Closures marked with the keyword staticare now syntactically invalid
- Shebangs inside --cfgand--check-cfgarguments are no longer allowed
- Add future incompatibility lint for temporary lifetime shortening in Rust 1.92
Cargo compatibility notes:
- cargo publishno longer keeps- .cratetarballs as final build artifacts when- build.build-diris set. These tarballs were previously included due to an oversight and are now treated as intermediate artifacts. To get- .cratetarballs as final artifacts, use- cargo package. In a future version, this change will apply regardless of- build.build-dir. #15910
- Adjust Cargo messages to match rustc diagnostic style. This changes some of the terminal colors used by Cargo messages. #15928
- Tools and projects relying on the internal details of Cargo's build-dirmay not work for users changing theirbuild-dirlayout. For those doing so, we'd recommend proactively testing these cases particularly as we are considering changing the default location of thebuild-dirin the future (cargo#16147). If you can't migrate off of Cargo's internal details, we'd like to learn more about your use case as we prepare to change the layout of thebuild-dir(cargo#15010).
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.