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
Compiler
Platform Support
Refer to Rust's platform support page
for more information on Rust's tiered platform support.
Libraries
Stabilized APIs
These APIs are now stable in const contexts:
Cargo
Rustdoc
Compatibility Notes
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
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
asm_gotofeature📝
📝
Self: Sizedbounds inimpls for unsized types📝
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
📝
📝
Debugimpl of raw pointers📝
Vec::with_capacityguarantees it allocates with the amount requested, even ifVec::capacityreturns a different number.📝
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)📝
env::home_dir📝
ControlFlowas#[must_use]📝
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
Rustdoc
Compatibility Notes
#![crate_name]attribute📝
📝
📝
Debugimpl of raw pointers print metadata if present📝
📝
dyntypes are no longer deduplicated📝
..inside of struct patterns (let Struct { #[attribute] .. }) =📝
ptr_cast_add_auto_to_objectlint into hard error📝
std::archintrinsics are now safe to call in some contexts, there may now be newunused_unsafewarnings in existing codebases.📝
widthandprecisionformatting options to 16 bits on all targets📝
📝
ControlFlowas#[must_use]📝
📝
📝
NonterminalandTokenKind::Interpolated📝
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