|
| 1 | +Version 1.90 (2025-09-18) |
| 2 | +========================== |
| 3 | + |
| 4 | +<a id="1.90-Language"></a> |
| 5 | + |
| 6 | +Language |
| 7 | +-------- |
| 8 | +- [Split up the `unknown_or_malformed_diagnostic_attributes` lint](https://github.com/rust-lang/rust/pull/140717). This lint has been split up into four finer-grained lints, with `unknown_or_malformed_diagnostic_attributes` now being the lint group that contains these lints: |
| 9 | + 1. `unknown_diagnostic_attributes`: unknown to the current compiler |
| 10 | + 2. `misplaced_diagnostic_attributes`: placed on the wrong item |
| 11 | + 3. `malformed_diagnostic_attributes`: malformed attribute syntax or options |
| 12 | + 4. `malformed_diagnostic_format_literals`: malformed format string literal |
| 13 | +- [Allow constants whose final value has references to mutable/external memory, but reject such constants as patterns](https://github.com/rust-lang/rust/pull/140942) |
| 14 | +- [Allow volatile access to non-Rust memory, including address 0](https://github.com/rust-lang/rust/pull/141260) |
| 15 | + |
| 16 | + |
| 17 | +<a id="1.90-Compiler"></a> |
| 18 | + |
| 19 | +Compiler |
| 20 | +-------- |
| 21 | +- [Use `lld` by default on `x86_64-unknown-linux-gnu`](https://github.com/rust-lang/rust/pull/140525). |
| 22 | +- [Tier 3 `musl` targets now link dynamically by default](https://github.com/rust-lang/rust/pull/144410). Affected targets: |
| 23 | + - `mips64-unknown-linux-muslabi64` |
| 24 | + - `powerpc64-unknown-linux-musl` |
| 25 | + - `powerpc-unknown-linux-musl` |
| 26 | + - `powerpc-unknown-linux-muslspe` |
| 27 | + - `riscv32gc-unknown-linux-musl` |
| 28 | + - `s390x-unknown-linux-musl` |
| 29 | + - `thumbv7neon-unknown-linux-musleabihf` |
| 30 | + |
| 31 | + |
| 32 | +<a id="1.90-Platform-Support"></a> |
| 33 | + |
| 34 | +Platform Support |
| 35 | +---------------- |
| 36 | +- [Demote `x86_64-apple-darwin` to Tier 2 with host tools](https://github.com/rust-lang/rust/pull/145252) |
| 37 | + |
| 38 | + |
| 39 | +Refer to Rust's [platform support page][platform-support-doc] |
| 40 | +for more information on Rust's tiered platform support. |
| 41 | + |
| 42 | +[platform-support-doc]: https://doc.rust-lang.org/rustc/platform-support.html |
| 43 | + |
| 44 | +<a id="1.90-Libraries"></a> |
| 45 | + |
| 46 | +Libraries |
| 47 | +--------- |
| 48 | +- [Stabilize `u*::{checked,overflowing,saturating,wrapping}_sub_signed`](https://github.com/rust-lang/rust/issues/126043) |
| 49 | +- [Allow comparisons between `CStr`, `CString`, and `Cow<CStr>`](https://github.com/rust-lang/rust/pull/137268) |
| 50 | +- [Remove some unsized tuple impls since unsized tuples can't be constructed](https://github.com/rust-lang/rust/pull/138340) |
| 51 | +- [Set `MSG_NOSIGNAL` for `UnixStream`](https://github.com/rust-lang/rust/pull/140005) |
| 52 | +- [`proc_macro::Ident::new` now supports `$crate`.](https://github.com/rust-lang/rust/pull/141996) |
| 53 | +- [Guarantee the pointer returned from `Thread::into_raw` has at least 8 bytes of alignment](https://github.com/rust-lang/rust/pull/143859) |
| 54 | + |
| 55 | + |
| 56 | +<a id="1.90-Stabilized-APIs"></a> |
| 57 | + |
| 58 | +Stabilized APIs |
| 59 | +--------------- |
| 60 | + |
| 61 | +- [`u{n}::checked_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.checked_sub_signed) |
| 62 | +- [`u{n}::overflowing_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.overflowing_sub_signed) |
| 63 | +- [`u{n}::saturating_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.saturating_sub_signed) |
| 64 | +- [`u{n}::wrapping_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.wrapping_sub_signed) |
| 65 | +- [`impl Copy for IntErrorKind`](https://doc.rust-lang.org/stable/std/num/enum.IntErrorKind.html#impl-Copy-for-IntErrorKind) |
| 66 | +- [`impl Hash for IntErrorKind`](https://doc.rust-lang.org/stable/std/num/enum.IntErrorKind.html#impl-Hash-for-IntErrorKind) |
| 67 | +- [`impl PartialEq<&CStr> for CStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3C%26CStr%3E-for-CStr) |
| 68 | +- [`impl PartialEq<CString> for CStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3CCString%3E-for-CStr) |
| 69 | +- [`impl PartialEq<Cow<CStr>> for CStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3CCow%3C'_,+CStr%3E%3E-for-CStr) |
| 70 | +- [`impl PartialEq<&CStr> for CString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3C%26CStr%3E-for-CString) |
| 71 | +- [`impl PartialEq<CStr> for CString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3CCStr%3E-for-CString) |
| 72 | +- [`impl PartialEq<Cow<CStr>> for CString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3CCow%3C'_,+CStr%3E%3E-for-CString) |
| 73 | +- [`impl PartialEq<&CStr> for Cow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3C%26CStr%3E-for-Cow%3C'_,+CStr%3E) |
| 74 | +- [`impl PartialEq<CStr> for Cow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3CCStr%3E-for-Cow%3C'_,+CStr%3E) |
| 75 | +- [`impl PartialEq<CString> for Cow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3CCString%3E-for-Cow%3C'_,+CStr%3E) |
| 76 | + |
| 77 | + |
| 78 | +These previously stable APIs are now stable in const contexts: |
| 79 | + |
| 80 | +- [`<[T]>::reverse`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.reverse) |
| 81 | +- [`f32::floor`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.floor) |
| 82 | +- [`f32::ceil`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.ceil) |
| 83 | +- [`f32::trunc`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.trunc) |
| 84 | +- [`f32::fract`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.fract) |
| 85 | +- [`f32::round`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.round) |
| 86 | +- [`f32::round_ties_even`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.round_ties_even) |
| 87 | +- [`f64::floor`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.floor) |
| 88 | +- [`f64::ceil`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.ceil) |
| 89 | +- [`f64::trunc`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.trunc) |
| 90 | +- [`f64::fract`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.fract) |
| 91 | +- [`f64::round`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.round) |
| 92 | +- [`f64::round_ties_even`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.round_ties_even) |
| 93 | + |
| 94 | + |
| 95 | +<a id="1.90-Cargo"></a> |
| 96 | + |
| 97 | +Cargo |
| 98 | +----- |
| 99 | +- [Add `http.proxy-cainfo` config for proxy certs](https://github.com/rust-lang/cargo/pull/15374/) |
| 100 | +- [Use `gix` for `cargo package`](https://github.com/rust-lang/cargo/pull/15534/) |
| 101 | +- [feat(publish): Stabilize multi-package publishing](https://github.com/rust-lang/cargo/pull/15636/) |
| 102 | + |
| 103 | +<a id="1.90-Rustdoc"></a> |
| 104 | + |
| 105 | +Rustdoc |
| 106 | +----- |
| 107 | +- [Add ways to collapse all impl blocks](https://github.com/rust-lang/rust/pull/141663). Previously the "Summary" button and "-" keyboard shortcut would never collapse `impl` blocks, now they do when shift is held |
| 108 | +- [Display unsafe attributes with `unsafe()` wrappers](https://github.com/rust-lang/rust/pull/143662) |
| 109 | + |
| 110 | + |
| 111 | +<a id="1.90-Compatibility-Notes"></a> |
| 112 | + |
| 113 | +Compatibility Notes |
| 114 | +------------------- |
| 115 | +- [Use `lld` by default on `x86_64-unknown-linux-gnu`](https://github.com/rust-lang/rust/pull/140525). |
| 116 | + See also <https://blog.rust-lang.org/2025/09/01/rust-lld-on-1.90.0-stable/>. |
| 117 | +- [Make `core::iter::Fuse`'s `Default` impl construct `I::default()` internally as promised in the docs instead of always being empty](https://github.com/rust-lang/rust/pull/140985) |
| 118 | +- [Set `MSG_NOSIGNAL` for `UnixStream`](https://github.com/rust-lang/rust/pull/140005) |
| 119 | + This may change program behavior but results in the same behavior as other primitives (e.g., stdout, network sockets). |
| 120 | + Programs relying on signals to terminate them should update handling of sockets to handle errors on write by exiting. |
| 121 | +- [On Unix `std::env::home_dir` will use the fallback if the `HOME` environment variable is empty](https://github.com/rust-lang/rust/pull/141840) |
| 122 | +- We now [reject unsupported `extern "{abi}"`s consistently in all positions](https://github.com/rust-lang/rust/pull/142134). This primarily affects the use of implementing traits on an `extern "{abi}"` function pointer, like `extern "stdcall" fn()`, on a platform that doesn't support that, like aarch64-unknown-linux-gnu. Direct usage of these unsupported ABI strings by declaring or defining functions was already rejected, so this is only a change for consistency. |
| 123 | +- [const-eval: error when initializing a static writes to that static](https://github.com/rust-lang/rust/pull/143084) |
| 124 | +- [Check that the `proc_macro_derive` macro has correct arguments when applied to the crate root](https://github.com/rust-lang/rust/pull/143607) |
| 125 | + |
| 126 | + |
1 | 127 | Version 1.89.0 (2025-08-07)
|
2 | 128 | ==========================
|
3 | 129 |
|
|
0 commit comments