Rust 1.91.0
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 and traits
Stabilized APIs
Path::file_prefixAtomicPtr::fetch_ptr_addAtomicPtr::fetch_ptr_subAtomicPtr::fetch_byte_addAtomicPtr::fetch_byte_sub
These previously stable APIs are now stable in const contexts:
<[T; N]>::each_ref<[T; N]>::each_mutOsString::newPathBuf::newTypeId::ofptr::with_exposed_provenance
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
Cargo compatibility notes:
cargo publishno longer keeps.cratetarballs as final build artifacts whenbuild.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, usecargo package. In a future version, this change will apply regardless ofbuild.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.