CLOSED: Please use pull request #144509 for final changes.
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.89.0 (2025-08-07)
Language
- Expand
unpredictable_function_pointer_comparisons to also lint on function pointer comparisons in external macros
📝
- Stabilize LoongArch target features
f, d, frecipe, lasx, lbt, lsx, and lvz
📝
- Remove
i128 and u128 from improper_ctypes_definitions
📝
- Stabilize
repr128 (#[repr(u128)], #[repr(i128)])
📝
- Add a warn-by-default
mismatched_lifetime_syntaxes lint.
This lint detects when the same lifetime is referred to by different syntax categories between function arguments and return values, which can be confusing to read, especially in unsafe code.
This lint supersedes the warn-by-default elided_named_lifetimes lint.
📝
- Stabilize the avx512 target features
📝
- Allow
#![doc(test(attr(..)))] everywhere
📝
- Extend temporary lifetime extension to also go through tuple struct and tuple variant constructors
📝
- Stabilize
kl and widekl target features for x86
📝
- Stabilize
sha512, sm3 and sm4 target features for x86
📝
- Stabilize explicitly inferred const arguments (
feature(generic_arg_infer))
📝
- Make the
dangerous_implicit_autorefs lint deny-by-default
📝
Compiler
Platform Support
Refer to Rust's platform support page
for more information on Rust's tiered platform support.
Libraries
Stabilized APIs
These previously stable 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
CLOSED: Please use pull request #144509 for final changes.
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.89.0 (2025-08-07)
Language
unpredictable_function_pointer_comparisonsto also lint on function pointer comparisons in external macros📝
f,d,frecipe,lasx,lbt,lsx, andlvz📝
i128andu128fromimproper_ctypes_definitions📝
repr128(#[repr(u128)],#[repr(i128)])📝
mismatched_lifetime_syntaxeslint.This lint detects when the same lifetime is referred to by different syntax categories between function arguments and return values, which can be confusing to read, especially in unsafe code.
This lint supersedes the warn-by-default
elided_named_lifetimeslint.📝
📝
#![doc(test(attr(..)))]everywhere📝
📝
klandwidekltarget features for x86📝
sha512,sm3andsm4target features for x86📝
feature(generic_arg_infer))📝
dangerous_implicit_autorefslint deny-by-default📝
Compiler
📝
📝
📝
Platform Support
loongarch32-unknown-noneandloongarch32-unknown-none-softfloat📝
Refer to Rust's platform support page
for more information on Rust's tiered platform support.
Libraries
file!📝
std::io::Seekforstd::io::Take📝
format_args!()in variable📝
#[must_use]to[T; N]::map.📝
Stabilized APIs
📝
SHA512,SM3andSM4intrinsics📝
std::os::linux::net::TcpStreamExt::{set_}quickack📝
DerefMutforLazy{Cell,Lock}📝
NonNull::{from_ref,from_mut}📝
NonNull::without_provenanceNonNull::with_exposed_provenanceNonNull::expose_provenance📝
{OsString,PathBuf}::leak📝
Cloneimplementation forChunkBy📝
NonZero<char>📝
Result::flatten📝
Defaultforarray::IntoIter📝
These previously stable APIs are now stable in const contexts:
{str,[u8]}::eq_ignore_ascii_case📝
<[T; N]>::as_mut_slice📝
Cargo
--editionand--edition-idiomsin cargo fixRustdoc
📝
Compatibility Notes
missing_fragment_specifieran unconditional error📝
neontarget feature onaarch64-unknown-none-softfloatcauses a warning because mixing code with and without that target feature is not properly supported by LLVM📝
?Sizedbounds on impls on recursive types which contain associated type projections. It is not expected to affect any existing published crates. Can be fixed by refactoring the involved types or opting into thesized_hierarchyunstable feature. See the FCP report for a code example.📝
elided_named_lifetimeslint is superseded by the warn-by-defaultmismatched_lifetime_syntaxeslint.📝
📝
Copyare now only available at the end of type checking📝
std::intrinsics::{copy,copy_nonoverlapping,write_bytes}are now proper intrinsics. There are no debug assertions guarding against UB, and they cannot be coerced to function pointers.📝
std::intrinsics::drop_in_place📝
📝
📝
📝
📝
!) are now reported in dependencies📝
std::ptr::copy_*intrinsics also perform the static self-init checks📝
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.
rustc-devcomponent📝
Other