Change8

1.90.0

Breaking Changes
📦 rust-languageView on GitHub →
3 breaking12 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

  1. 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()`.
  2. Review socket write operations; programs relying on receiving signals (like SIGPIPE) on write errors should update error handling to exit instead.
  3. 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`