Migrating to Rust Language 1.90.0
Version 1.90.0 introduces 3 breaking changes. This guide details how to update your code.
Released: 9/18/2025
⚠️ Check Your Code
If you use any of these symbols, you need to read this guide:
`unknown_or_malformed_diagnostic_attributes` (lint group)`unknown_diagnostic_attributes` (new lint)`misplaced_diagnostic_attributes` (new lint)`malformed_diagnostic_attributes` (new lint)`malformed_diagnostic_format_literals` (new lint)`u*{checked,overflowing,saturating,wrapping}_sub_signed``CStr``CString``Cow<CStr>``proc_macro::Ident::new``Thread::into_raw``UnixStream``core::iter::Fuse``std::env::home_dir`Breaking Changes
●Issue #1
The `core::iter::Fuse`'s `Default` impl now constructs `I::default()` internally instead of always being empty. Programs relying on the previous behavior where `Fuse::default()` produced an empty iterator regardless of the inner type's default should update.
●Issue #2
Setting `MSG_NOSIGNAL` for `UnixStream` might change program behavior if programs relied on receiving signals (like SIGPIPE) upon writing to a broken pipe. Programs should update socket write handling to check for errors and exit if necessary, aligning with other primitives.
●Issue #3
Unsupported `extern "{abi}"` usages are now rejected consistently in all positions, including implementing traits on extern function pointers (e.g., `extern "stdcall" fn()`) on unsupported platforms. Direct function definition/declaration using these ABIs was already rejected.
Migration Steps
- 1If you relied on `core::iter::Fuse::default()` producing an empty iterator regardless of the inner type, update your code to handle the new behavior where it calls `I::default()`.
- 2Review socket write operations; programs relying on receiving signals (like SIGPIPE) on write errors should update error handling to exit instead.
- 3If you were using unsupported `extern "{abi}"` declarations in trait implementations on function pointers on platforms that do not support those ABIs, you must update the ABI or remove the implementation.
Release Summary
This release introduces finer-grained diagnostic lints, stabilizes several integer arithmetic methods for signed subtraction, and updates compiler defaults like using `lld` on Linux x86_64.
Need More Details?
View the full release notes and all changes for Rust Language 1.90.0.
View Full Changelog