- 
                Notifications
    
You must be signed in to change notification settings  - Fork 13.9k
 
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.
Description
NOTE: We are trying this issue as a new way to work on the draft release notes.
Use the 📝 links to edit those that have a relnotes-tracking-issue,
and they will be updated when we regenerate the notes periodically.
cc @rust-lang/release
Version 1.87.0 (2025-05-15)
Language
- Stabilize 
asm_gotofeature
📝 - Allow parsing open beginning ranges after unary operators
📝 - Don't require method impls for methods with 
Self: Sizedbounds inimpls for unsized types
📝 - Stabilize 
feature(precise_capturing_in_traits)allowinguse<...>bounds on return positionimpl Traitintraits
📝 
Compiler
Platform Support
Refer to Rust's platform support page
for more information on Rust's tiered platform support.
Libraries
- Stabilize the anonymous pipe API
📝 - Add support for unbounded left/right shift operations
📝 - Print pointer metadata in 
Debugimpl of raw pointers
📝 Vec::with_capacityguarantees it allocates with the amount requested, even ifVec::capacityreturns a different number.
📝- Most 
std::archintrinsics which don't take pointer arguments can now be called from safe code if the caller has the appropriate target features already enabled (mark x86 intrinsics as safe stdarch#1714, mark arm intrinsics as safe stdarch#1716, mark riscv intrinsics as safe stdarch#1717)
📝 - Undeprecate 
env::home_dir
📝 - Denote 
ControlFlowas#[must_use]
📝 - Macros such as 
assert_eq!andvec!now supportconst {...}expressions
📝 
Stabilized APIs
Vec::extract_ifvec::ExtractIfLinkedList::extract_iflinked_list::ExtractIf
📝<[T]>::split_off<[T]>::split_off_mut<[T]>::split_off_first<[T]>::split_off_first_mut<[T]>::split_off_last<[T]>::split_off_last_mut
📝String::extend_from_within
📝os_str::DisplayOsString::displayOsStr::display
📝io::pipeio::PipeReaderio::PipeWriterimpl From<PipeReader> for OwnedHandleimpl From<PipeWriter> for OwnedHandleimpl From<PipeReader> for Stdioimpl From<PipeWriter> for Stdioimpl From<PipeReader> for OwnedFdimpl From<PipeWriter> for OwnedFd
📝Box<MaybeUninit<T>>::write
📝impl TryFrom<Vec<u8>> for String
📝
These APIs are now stable in const contexts:
<*const T>::offset_from_unsigned<*const T>::byte_offset_from_unsigned<*mut T>::offset_from_unsigned<*mut T>::byte_offset_from_unsignedNonNull::offset_from_unsignedNonNull::byte_offset_from_unsigned
📝<uN>::cast_signedNonZero::<uN>::cast_signed.<iN>::cast_signed.NonZero::<iN>::cast_unsigned.
📝<uN>::is_multiple_of
📝<uN>::unbounded_shl<uN>::unbounded_shr<iN>::unbounded_shl<iN>::unbounded_shr
📝<str>::from_utf8<str>::from_utf8_mut<str>::from_utf8_unchecked<str>::from_utf8_unchecked_mut
📝<[T]>::copy_from_slice
📝SocketAddr::set_ipSocketAddr::set_port,SocketAddrV4::set_ipSocketAddrV4::set_port,SocketAddrV6::set_ipSocketAddrV6::set_portSocketAddrV6::set_flowinfoSocketAddrV6::set_scope_id
📝char::is_digitchar::is_whitespace
📝<iN>:midpoint
📝<[[T; N]]>::as_flattened<[[T; N]]>::as_flattened_mut
📝<str>::from_utf8_mutcore::str::from_utf8_mut
📝String::into_bytesString::as_strString::capacityString::as_bytesString::lenString::is_emptyString::as_mut_strString::as_mut_vecVec::as_ptrVec::as_sliceVec::capacityVec::lenVec::is_emptyVec::as_mut_sliceVec::as_mut_ptr
📝
Cargo
- Add terminal integration via ANSI OSC 9;4 sequences
 - chore: bump openssl to v3
 - feat(package): add --exclude-lockfile flag
 
Rustdoc
Compatibility Notes
- Rust now raises an error for macro invocations inside the 
#![crate_name]attribute
📝 - Unstable fields are now always considered to be inhabited
📝 - Macros ??? may ?? break now ??? due to ranges and unary operators ??? idk ?
📝 - Make 
Debugimpl of raw pointers print metadata if present
📝 - Warn against function pointers using unsupported ABI strings in dependencies
📝 - Associated types on 
dyntypes are no longer deduplicated
📝 - Forbid attributes on 
..inside of struct patterns (let Struct { #[attribute] .. }) =
📝 - Make 
ptr_cast_add_auto_to_objectlint into hard error
📝 - Many 
std::archintrinsics are now safe to call in some contexts, there may now be newunused_unsafewarnings in existing codebases.
📝 - Limit 
widthandprecisionformatting options to 16 bits on all targets
📝 - Turn order dependent trait objects future incompat warning into a hard error
📝 - Denote 
ControlFlowas#[must_use]
📝 - Remove i586-pc-windows-msvc target
📝 - Windows: The standard library no longer links advapi32, except on win7. Code such as C libraries that were relying on this assumption may need to explicitly link advapi32.
📝 - Remove 
NonterminalandTokenKind::Interpolated
📝 - expand: Leave traces when expanding 
cfgattributes
📝 
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
ifsheldon, ambaxter, Gordon01 and ebkalderonifsheldon, ambaxter, Gordon01, ebkalderon and attila-lin
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.