Migrating to Rust Language 1.89.0
Version 1.89.0 introduces 2 breaking changes. This guide details how to update your code.
Released: 8/7/2025
⚠️ Check Your Code
If you use any of these symbols, you need to read this guide:
generic_arg_infermismatched_lifetime_syntaxeselided_named_lifetimesunpredictable_function_pointer_comparisonsdangerous_implicit_autorefsavx512klwideklsha512sm3sm4fdfrecipelasxlbtlsxlvzi128u128improper_ctypes_definitionsrepr128doc(test(attr(..)))tuple struct constructorstuple variant constructorsextern "C"wasm32-unknown-unknownaarch64-linuxArm64EC Windowsx86_64-apple-darwinfile![T; N]::mapLazyCellLazyLockarray::IntoIterslice::ChunkByio::TakeNonZero<char>File::lockFile::lock_sharedFile::try_lockFile::try_lock_sharedFile::unlockNonNull::from_refNonNull::from_mutNonNull::without_provenanceNonNull::with_exposed_provenanceNonNull::expose_provenanceOsString::leakPathBuf::leakResult::flattenTcpStreamExt::quickackTcpStreamExt::set_quickack<[T; N]>::as_mut_slice<[u8]>::eq_ignore_ascii_casestr::eq_ignore_ascii_caseBreaking Changes
●Issue #1
The `missing_fragment_specifier` lint is now an unconditional error.
●Issue #2
A small breaking change affects `?Sized` bounds on impls on recursive types which contain associated type projections due to the Sized Hierarchy changes. Fix by refactoring involved types or opting into the `sized_hierarchy` unstable feature.
Migration Steps
- 1If you rely on the behavior of the now-removed `elided_named_lifetimes` lint, ensure your code adheres to the new `mismatched_lifetime_syntaxes` lint rules.
- 2If you encounter issues with `?Sized` bounds on impls involving recursive types with associated type projections, refactor the involved types or consider opting into the `sized_hierarchy` unstable feature.
- 3If you use `cargo fix` or `cargo clippy --fix`, note that they now default to the same Cargo target selection as other build commands (i.e., they no longer apply to all targets by default unless `--edition` is used).
Release Summary
This release stabilizes many language features, including generic argument inference and `repr(u128)`, stabilizes numerous APIs like file locking and `NonNull` methods, and introduces new Tier-3 targets for LoongArch.
Need More Details?
View the full release notes and all changes for Rust Language 1.89.0.
View Full Changelog