Change8

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

2
Breaking Changes
3
Migration Steps
56
Affected Symbols

⚠️ 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_case

Breaking 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

  1. 1
    If 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.
  2. 2
    If 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.
  3. 3
    If 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