Open
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_goto
feature
📝 - Allow parsing open beginning ranges after unary operators
📝 - Don't require method impls for methods with
Self: Sized
bounds inimpl
s for unsized types
📝 - Stabilize
feature(precise_capturing_in_traits)
allowinguse<...>
bounds on return positionimpl Trait
intrait
s
📝
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
Debug
impl of raw pointers
📝 Vec::with_capacity
guarantees it allocates with the amount requested, even ifVec::capacity
returns a different number.
📝- Most
std::arch
intrinsics 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
ControlFlow
as#[must_use]
📝 - Macros such as
assert_eq!
andvec!
now supportconst {...}
expressions
📝
Stabilized APIs
Vec::extract_if
vec::ExtractIf
LinkedList::extract_if
linked_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::Display
OsString::display
OsStr::display
📝io::pipe
io::PipeReader
io::PipeWriter
impl From<PipeReader> for OwnedHandle
impl From<PipeWriter> for OwnedHandle
impl From<PipeReader> for Stdio
impl From<PipeWriter> for Stdio
impl From<PipeReader> for OwnedFd
impl 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_unsigned
NonNull::offset_from_unsigned
NonNull::byte_offset_from_unsigned
📝<uN>::cast_signed
NonZero::<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_ip
SocketAddr::set_port
,SocketAddrV4::set_ip
SocketAddrV4::set_port
,SocketAddrV6::set_ip
SocketAddrV6::set_port
SocketAddrV6::set_flowinfo
SocketAddrV6::set_scope_id
📝char::is_digit
char::is_whitespace
📝<iN>:midpoint
📝<[[T; N]]>::as_flattened
<[[T; N]]>::as_flattened_mut
📝<str>::from_utf8_mut
core::str::from_utf8_mut
📝String::into_bytes
String::as_str
String::capacity
String::as_bytes
String::len
String::is_empty
String::as_mut_str
String::as_mut_vec
Vec::as_ptr
Vec::as_slice
Vec::capacity
Vec::len
Vec::is_empty
Vec::as_mut_slice
Vec::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
Debug
impl of raw pointers print metadata if present
📝 - Warn against function pointers using unsupported ABI strings in dependencies
📝 - Associated types on
dyn
types are no longer deduplicated
📝 - Forbid attributes on
..
inside of struct patterns (let Struct { #[attribute] .. }) =
📝 - Make
ptr_cast_add_auto_to_object
lint into hard error
📝 - Many
std::arch
intrinsics are now safe to call in some contexts, there may now be newunused_unsafe
warnings in existing codebases.
📝 - Limit
width
andprecision
formatting options to 16 bits on all targets
📝 - Turn order dependent trait objects future incompat warning into a hard error
📝 - Denote
ControlFlow
as#[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
NtPat
,NtMeta
, andNtPath
📝 - expand: Leave traces when expanding
cfg
attributes
📝
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.