1.90.0
Breaking Changes📦 rust-languageView on GitHub →
⚠ 3 breaking✨ 12 features🐛 3 fixes🔧 14 symbols
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.
⚠️ Breaking Changes
- 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.
- 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.
- 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
- If 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()`.
- Review socket write operations; programs relying on receiving signals (like SIGPIPE) on write errors should update error handling to exit instead.
- If 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.
✨ New Features
- The lint `unknown_or_malformed_diagnostic_attributes` has been split into four finer-grained lints: `unknown_diagnostic_attributes`, `misplaced_diagnostic_attributes`, `malformed_diagnostic_attributes`, and `malformed_diagnostic_format_literals`. `unknown_or_malformed_diagnostic_attributes` is now the lint group.
- Constants whose final value has references to mutable/external memory are now allowed, but rejected when used as patterns.
- Volatile access to non-Rust memory, including address 0, is now allowed.
- Stabilized `u*::{checked,overflowing,saturating,wrapping}_sub_signed` methods.
- Comparisons between `CStr`, `CString`, and `Cow<CStr>` are now allowed.
- `proc_macro::Ident::new` now supports `$crate`.
- The pointer returned from `Thread::into_raw` is guaranteed to have at least 8 bytes of alignment.
- Added `http.proxy-cainfo` config in Cargo for proxy certificates.
- Cargo now uses `gix` for `cargo package`.
- Multi-package publishing is stabilized in Cargo.
- Rustdoc now allows collapsing all impl blocks when the shift key is held while using the "Summary" button or "-" shortcut.
- Rustdoc now displays unsafe attributes with `unsafe()` wrappers.
🐛 Bug Fixes
- Tier 3 `musl` targets now link dynamically by default for several targets (e.g., `mips64-unknown-linux-muslabi64`, `powerpc64-unknown-linux-musl`, etc.).
- On Unix, `std::env::home_dir` will use the fallback if the `HOME` environment variable is empty.
- Const evaluation now errors when initializing a static writes to that static.
🔧 Affected Symbols
`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`