Repository navigation
Draft release notes for 1.91 #147010
Copy link
Copy link
Closed
Labels
T-releaseRelevant to the release subteam, which will review and decide on the PR/issue.Relevant to the release subteam, which will review and decide on the PR/issue.relnotes-tracking-issueMarks issues tracking what text to put in release notes.Marks issues tracking what text to put in release notes.
Milestone
Description
NOTE: Use the 📝 links to edit those that have a relnotes-tracking-issue,
and they will be updated when we regenerate the notes periodically (manually).
Version 1.91.0 (2025-10-30)
Language
- Add
target_env = "macabi"andtarget_env = "sim"cfgs as replacements for thetarget_abicfgs with the same values.
📝 - 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, and aapcs ABIs. This brings these ABIs in line with the C ABI: variadic functions can be declared in extern blocks but not defined.
📝 - Always require coroutine captures to be drop-live
📝 - Add lint against dangling pointers from local variables
📝 - Upgrade semicolon_in_expressions_from_macros from warn to deny
📝 - Stabilize loongarch32 inline asm
📝 - Add warn-by-default
integer_to_ptr_transmuteslint against integer to pointer transmutes
📝 - Stabilize
sse4aandtbmtarget features
📝
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 the 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
📝 - implement Sum and Product for Saturating(u*)
📝 - document assumptions about
CloneandEqtraits
Stabilized APIs
Path::file_prefix
📝AtomicPtr::fetch_ptr_addAtomicPtr::fetch_ptr_subAtomicPtr::fetch_byte_addAtomicPtr::fetch_byte_subAtomicPtr::fetch_orAtomicPtr::fetch_andAtomicPtr::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_powi{N}::strict_add_unsignedi{N}::strict_sub_unsignedi{N}::strict_absu{N}::strict_add_signedu{N}::strict_sub_signed
📝PanicHookInfo::payload_as_str
📝core::iter::chain
📝u{N}::checked_signed_diff
📝array::repeat
📝PathBuf::add_extensionPathBuf::with_added_extension
📝Duration::from_minsDuration::from_hours
📝impl PartialEq<str> for PathBufimpl PartialEq<String> for PathBufimpl PartialEq<str> for Pathimpl PartialEq<String> for Pathimpl PartialEq<PathBuf> for Stringimpl PartialEq<Path> for Stringimpl PartialEq<PathBuf> for strimpl PartialEq<Path> for str
📝Ipv4Addr::from_octetsIpv6Addr::from_octetsIpv6Addr::from_segments
📝impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sizedimpl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sizedimpl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
📝Cell::as_array_of_cells
📝u{N}::carrying_addu{N}::borrowing_subu{N}::carrying_mulu{N}::carrying_mul_add
📝BTreeMap::extract_ifBTreeSet::extract_if
📝
These previously stable APIs are now stable in const contexts:
[T;N]::each_ref[T;N]::each_mut
📝OsString::newPathBuf::new
📝TypeId::of
📝ptr::with_exposed_provenanceptr::with_exposed_provenance_mut
📝
Cargo
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
- 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.
📝 - Error on invalid
#[should_panic]attributes
📝 - Mark all deprecation lints in name resolution as deny-by-default and report-in-deps
📝 - 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
📝 - Be more strict when parsing attributes, erroring on many invalid attributes
📝 - fix drop scope for
super letbindings withinif let
📝 - Invalid literal suffixes in tuple indexing, tuple struct indexing, and struct field name position are now correctly rejected
📝 - Closures marked with the keyword
staticare now syntactically invalid
📝 - Shebangs inside
--cfgand--check-cfgarguments are no longer allowed
📝 - Add future compatibility lint for temporary lifetimes shortening in Rust 1.92
📝
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.
Other
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
T-releaseRelevant to the release subteam, which will review and decide on the PR/issue.Relevant to the release subteam, which will review and decide on the PR/issue.relnotes-tracking-issueMarks issues tracking what text to put in release notes.Marks issues tracking what text to put in release notes.
Activity
jieyouxu commentedon Sep 25, 2025
@rustbot ping relnotes-interest-group
rustbot commentedon Sep 25, 2025
Hi relnotes-interest-group, this issue/PR could use some help in reviewing /
adjusting release notes. Could you take a look if available? Thanks <3
cc @alex-semenyuk @jieyouxu @joshtriplett @Kobzol @lcnr @traviscross
theemathas commentedon Sep 25, 2025
Noratrieb commentedon Sep 26, 2025
Noratrieb commentedon Sep 26, 2025
Noratrieb commentedon Sep 26, 2025
Noratrieb commentedon Sep 26, 2025
Noratrieb commentedon Sep 26, 2025
Mark-Simulacrum commentedon Sep 26, 2025
The tracking issues indeed should probably move into stabilized APIs. For the other notes, can you update the issues as outlined above? Otherwise I'll try to persist feedback back into issues in the next few days. Thanks!
4 remaining items
joshtriplett commentedon Oct 10, 2025
Reviewed, LGTM.
pthariensflame commentedon Oct 10, 2025
There are some issues with the stabilized APIs section that I’ve spotted, like missing entries; I’m going to go through it later today with a proverbial fine-toothed comb.
pthariensflame commentedon Oct 11, 2025
Proposed diff of that section:
## Stabilized APIs * [`Path::file_prefix`](https://doc.rust-lang.org/std/path/struct.Path.html#method.file_prefix) [📝](https://github.com/rust-lang/rust/issues/133640) * [`AtomicPtr::fetch_ptr_add`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_ptr_add) * [`AtomicPtr::fetch_ptr_sub`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_ptr_sub) * [`AtomicPtr::fetch_byte_add`](https://doc.rust- lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_byte_add) * [`AtomicPtr::fetch_byte_sub`](https://doc.rust- lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_byte_sub) * [`AtomicPtr::fetch_or`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_or) * [`AtomicPtr::fetch_and`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_and) * [`AtomicPtr::fetch_xor`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_xor) [📝](https://github.com/rust-lang/rust/issues/145102) * [`{integer}::strict_add`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_add) * [`{integer}::strict_sub`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_sub) * [`{integer}::strict_mul`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_mul) * [`{integer}::strict_div`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_div) * [`{integer}::strict_div_euclid`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_div_euclid) * [`{integer}::strict_rem`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_rem) * [`{integer}::strict_rem_euclid`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_rem_euclid) * [`{integer}::strict_neg`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_neg) * [`{integer}::strict_shl`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_shl) * [`{integer}::strict_shr`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_shr) * [`{integer}::strict_pow`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_pow) -* [`{unsigned}::strict_add_unsigned`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_add_unsigned) -* [`{unsigned}::strict_sub_unsigned`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_sub_unsigned) -* [`{unsigned}::strict_abs`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_abs) -* [`{signed}::strict_add_signed`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_add_signed) +* [`i{N}::strict_add_unsigned`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_add_unsigned) +* [`i{N}::strict_sub_unsigned`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_sub_unsigned) +* [`i{N}::strict_abs`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_abs) +* [`u{N}::strict_add_signed`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_add_signed) +* [`u{N}::strict_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_sub_signed) [📝](https://github.com/rust-lang/rust/issues/144842) * [`PanicHookInfo::payload_as_str`](https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html#method.payload_as_str) [📝](https://github.com/rust-lang/rust/issues/131199) * [`core::iter::chain`](https://github.com/rust-lang/rust/issues/125964) [📝](https://github.com/rust-lang/rust/issues/145444) -* [`u{N}::unsigned_signed_diff`](https://doc.rust-lang.org/stable/std/primitive.u16.html#method.checked_signed_diff) +* [`u{N}::checked_signed_diff`](https://doc.rust-lang.org/stable/std/primitive.u16.html#method.checked_signed_diff) [📝](https://github.com/rust-lang/rust/issues/147080) * [`array::repeat`](https://github.com/rust-lang/rust/issues/126695) [📝](https://github.com/rust-lang/rust/issues/145445) * [`PathBuf::add_extension`](https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.add_extension) * [`PathBuf::with_added_extension`](https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.with_added_extension) [📝](https://github.com/rust-lang/rust/issues/135644) * [`Duration::from_mins`](https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.from_mins) * [`Duration::from_hours`](https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.from_hours) [📝](https://github.com/rust-lang/rust/issues/143497) * [`impl PartialEq<{str,String}> for {Path,PathBuf}`](https://github.com/rust-lang/rust/pull/140956) [📝](https://github.com/rust-lang/rust/issues/145441) * [`Ipv4Addr::from_octets`](https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.from_octets) * [`Ipv6Addr::from_octets`](https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.from_octets) * [`Ipv6Addr::from_segments`](https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.from_segments) [📝](https://github.com/rust-lang/rust/issues/145440) * [`impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized`](https://doc.rust-lang.org/stable/std/default/trait.Default.html#impl-Default-for-Pin%3CBox%3CT%3E%3E) * [`impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized`](https://doc.rust-lang.org/stable/std/default/trait.Default.html#impl-Default-for-Pin%3CRc%3CT%3E%3E) * [`impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized`](https://doc.rust-lang.org/stable/std/default/trait.Default.html#impl-Default-for-Pin%3CArc%3CT%3E%3E) [📝](https://github.com/rust-lang/rust/issues/145442) * [`Cell::as_array_of_cells`](https://doc.rust-lang.org/stable/std/cell/struct.Cell.html#method.as_array_of_cells) [📝](https://github.com/rust-lang/rust/issues/145446) -* [`uN::carrying_add`](https://doc.rust-lang.org/nightly/std/primitive.u64.html#method.carrying_add) -* [`uN::borrowing_sub`](https://doc.rust-lang.org/nightly/std/primitive.u64.html#method.borrowing_sub) -* [`uN::carrying_mul`](https://doc.rust-lang.org/nightly/std/primitive.u64.html#method.carrying_mul) -* [`uN::carrying_mul_add`](https://doc.rust-lang.org/nightly/std/primitive.u64.html#method.carrying_mul_add) +* [`u{N}::carrying_add`](https://doc.rust-lang.org/stable/std/primitive.u64.html#method.carrying_add) +* [`u{N}::borrowing_sub`](https://doc.rust-lang.org/stable/std/primitive.u64.html#method.borrowing_sub) +* [`u{N}::carrying_mul`](https://doc.rust-lang.org/stable/std/primitive.u64.html#method.carrying_mul) +* [`u{N}::carrying_mul_add`](https://doc.rust-lang.org/stable/std/primitive.u64.html#method.carrying_mul_add) [📝](https://github.com/rust-lang/rust/issues/146005) * [`BTreeMap::extract_if`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.extract_if) * [`BTreeSet::extract_if`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html#method.extract_if) [📝](https://github.com/rust-lang/rust/issues/146493)jieyouxu commentedon Oct 11, 2025
s/
nightly//stable// toopthariensflame commentedon Oct 11, 2025
Incorporated this change into the suggested diff; thank you!
Mark-Simulacrum commentedon Oct 11, 2025
Sync'd tracking issues with the description.
Mark-Simulacrum commentedon Oct 23, 2025
This is now up as a PR, please direct further comments as suggestions there: #148013
Rollup merge of rust-lang#148013 - Mark-Simulacrum:relnotes, r=Mark-S…
Rollup merge of rust-lang#148013 - Mark-Simulacrum:relnotes, r=Mark-S…
Rollup merge of rust-lang#148013 - Mark-Simulacrum:relnotes, r=Mark-S…
Unrolled build for #148013
Rollup merge of #148013 - Mark-Simulacrum:relnotes, r=Mark-Simulacrum
fix(sys): add /usr/local/lib to macOS linker search path