|  | 
|  | 1 | +Version 1.86.0 (2025-04-03) | 
|  | 2 | +========================== | 
|  | 3 | + | 
|  | 4 | +<a id="1.86.0-Language"></a> | 
|  | 5 | + | 
|  | 6 | +Language | 
|  | 7 | +-------- | 
|  | 8 | +- [Stabilize upcasting trait objects to supertraits.](https://github.com/rust-lang/rust/pull/134367) | 
|  | 9 | +- [Allow safe functions to be marked with the `#[target_feature]` attribute.](https://github.com/rust-lang/rust/pull/134090) | 
|  | 10 | +- [The `missing_abi` lint now warns-by-default.](https://github.com/rust-lang/rust/pull/132397) | 
|  | 11 | +- Rust now lints about double negations, to catch cases that might have intended to be a prefix decrement operator (`--x`) as written in other languages. This was previously a clippy lint, `clippy::double_neg`, and is [now available directly in Rust as `double_negations`.](https://github.com/rust-lang/rust/pull/126604) | 
|  | 12 | +- [More pointers are now detected as definitely not-null based on their alignment in const eval.](https://github.com/rust-lang/rust/pull/133700) | 
|  | 13 | +- [Empty `repr()` attribute applied to invalid items are now correctly rejected.](https://github.com/rust-lang/rust/pull/133925) | 
|  | 14 | +- [Inner attributes `#![test]` and `#![rustfmt::skip]` are no longer accepted in more places than intended.](https://github.com/rust-lang/rust/pull/134276) | 
|  | 15 | + | 
|  | 16 | +<a id="1.86.0-Compiler"></a> | 
|  | 17 | + | 
|  | 18 | +Compiler | 
|  | 19 | +-------- | 
|  | 20 | +- [Debug-assert that raw pointers are non-null on access.](https://github.com/rust-lang/rust/pull/134424) | 
|  | 21 | +- [Change `-O` to mean `-C opt-level=3` instead of `-C opt-level=2` to match Cargo's defaults.](https://github.com/rust-lang/rust/pull/135439) | 
|  | 22 | +- [Fix emission of `overflowing_literals` under certain macro environments.](https://github.com/rust-lang/rust/pull/136393) | 
|  | 23 | + | 
|  | 24 | +<a id="1.86.0-Platform-Support"></a> | 
|  | 25 | + | 
|  | 26 | +Platform Support | 
|  | 27 | +---------------- | 
|  | 28 | +- [Replace `i686-unknown-redox` target with `i586-unknown-redox`.](https://github.com/rust-lang/rust/pull/136698) | 
|  | 29 | +- [Increase baseline CPU of `i686-unknown-hurd-gnu` to Pentium 4.](https://github.com/rust-lang/rust/pull/136700) | 
|  | 30 | +- New tier 3 targets: | 
|  | 31 | +  - [`{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock`](https://github.com/rust-lang/rust/pull/133631). | 
|  | 32 | +    For supporting Neutrino QNX 7.1 with `io-socket` network stack. | 
|  | 33 | +  - [`{aarch64-unknown,x86_64-pc}-nto-qnx800`](https://github.com/rust-lang/rust/pull/133631). | 
|  | 34 | +    For supporting Neutrino QNX 8.0 (`no_std`-only). | 
|  | 35 | +  - [`{x86_64,i686}-win7-windows-gnu`](https://github.com/rust-lang/rust/pull/134609). | 
|  | 36 | +    Intended for backwards compatibility with Windows 7. `{x86_64,i686}-win7-windows-msvc` are the Windows MSVC counterparts that already exist as Tier 3 targets. | 
|  | 37 | +  - [`amdgcn-amd-amdhsa`](https://github.com/rust-lang/rust/pull/134740). | 
|  | 38 | +  - [`x86_64-pc-cygwin`](https://github.com/rust-lang/rust/pull/134999). | 
|  | 39 | +  - [`{mips,mipsel}-mti-none-elf`](https://github.com/rust-lang/rust/pull/135074). | 
|  | 40 | +    Initial bare-metal support. | 
|  | 41 | +  - [`m68k-unknown-none-elf`](https://github.com/rust-lang/rust/pull/135085). | 
|  | 42 | +  - [`armv7a-nuttx-{eabi,eabihf}`, `aarch64-unknown-nuttx`, and `thumbv7a-nuttx-{eabi,eabihf}`](https://github.com/rust-lang/rust/pull/135757). | 
|  | 43 | + | 
|  | 44 | +Refer to Rust's [platform support page][platform-support-doc] | 
|  | 45 | +for more information on Rust's tiered platform support. | 
|  | 46 | + | 
|  | 47 | +<a id="1.86.0-Libraries"></a> | 
|  | 48 | + | 
|  | 49 | +Libraries | 
|  | 50 | +--------- | 
|  | 51 | +- The type of `FromBytesWithNulError` in `CStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>` was [changed from an opaque struct to an enum](https://github.com/rust-lang/rust/pull/134143), allowing users to examine why the conversion failed. | 
|  | 52 | +- [Remove `RustcDecodable` and `RustcEncodable`.](https://github.com/rust-lang/rust/pull/134272) | 
|  | 53 | +- [Deprecate libtest's `--logfile` option.](https://github.com/rust-lang/rust/pull/134283) | 
|  | 54 | +- [On recent versions of Windows, `std::fs::remove_file` will now remove read-only files.](https://github.com/rust-lang/rust/pull/134679) | 
|  | 55 | + | 
|  | 56 | +<a id="1.86.0-Stabilized-APIs"></a> | 
|  | 57 | + | 
|  | 58 | +Stabilized APIs | 
|  | 59 | +--------------- | 
|  | 60 | + | 
|  | 61 | +- [`{float}::next_down`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_down) | 
|  | 62 | +- [`{float}::next_up`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_up) | 
|  | 63 | +- [`<[_]>::get_disjoint_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_mut) | 
|  | 64 | +- [`<[_]>::get_disjoint_unchecked_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_unchecked_mut) | 
|  | 65 | +- [`slice::GetDisjointMutError`](https://doc.rust-lang.org/stable/std/slice/enum.GetDisjointMutError.html) | 
|  | 66 | +- [`HashMap::get_disjoint_mut`](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_mut) | 
|  | 67 | +- [`HashMap::get_disjoint_unchecked_mut`](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_unchecked_mut) | 
|  | 68 | +- [`NonZero::count_ones`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.count_ones) | 
|  | 69 | +- [`Vec::pop_if`](https://doc.rust-lang.org/std/vec/struct.Vec.html#method.pop_if) | 
|  | 70 | +- [`sync::Once::wait`](https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait) | 
|  | 71 | +- [`sync::Once::wait_force`](https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait_force) | 
|  | 72 | +- [`sync::OnceLock::wait`](https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html#method.wait) | 
|  | 73 | + | 
|  | 74 | +These APIs are now stable in const contexts: | 
|  | 75 | + | 
|  | 76 | +- [`hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html) | 
|  | 77 | +- [`io::Cursor::get_mut`](https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_mut) | 
|  | 78 | +- [`io::Cursor::set_position`](https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.set_position) | 
|  | 79 | +- [`str::is_char_boundary`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.is_char_boundary) | 
|  | 80 | +- [`str::split_at`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at) | 
|  | 81 | +- [`str::split_at_checked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_checked) | 
|  | 82 | +- [`str::split_at_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut) | 
|  | 83 | +- [`str::split_at_mut_checked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut_checked) | 
|  | 84 | + | 
|  | 85 | +<a id="1.86.0-Cargo"></a> | 
|  | 86 | + | 
|  | 87 | +Cargo | 
|  | 88 | +----- | 
|  | 89 | +- [When merging, replace rather than combine configuration keys that refer to a program path and its arguments.](https://github.com/rust-lang/cargo/pull/15066/) | 
|  | 90 | +- [Error if both `--package` and `--workspace` are passed but the requested package is missing.](https://github.com/rust-lang/cargo/pull/15071/) This was previously silently ignored, which was considered a bug since missing packages should be reported. | 
|  | 91 | +- [Deprecate the token argument in `cargo login` to avoid shell history leaks.](https://github.com/rust-lang/cargo/pull/15057/) | 
|  | 92 | +- [Simplify the implementation of `SourceID` comparisons.](https://github.com/rust-lang/cargo/pull/14980/) This may potentially change behavior if the canonicalized URL compares differently in alternative registries. | 
|  | 93 | + | 
|  | 94 | +<a id="1.86.0-Rustdoc"></a> | 
|  | 95 | + | 
|  | 96 | +Rustdoc | 
|  | 97 | +----- | 
|  | 98 | +- [Add a sans-serif font setting.](https://github.com/rust-lang/rust/pull/133636) | 
|  | 99 | + | 
|  | 100 | +<a id="1.86.0-Compatibility-Notes"></a> | 
|  | 101 | + | 
|  | 102 | +Compatibility Notes | 
|  | 103 | +------------------- | 
|  | 104 | +- [The `wasm_c_abi` future compatibility warning is now a hard error.](https://github.com/rust-lang/rust/pull/133951) | 
|  | 105 | +  Users of `wasm-bindgen` should upgrade to at least version 0.2.89, otherwise compilation will fail. | 
|  | 106 | +- [Remove long-deprecated no-op attributes `#![no_start]` and `#![crate_id]`.](https://github.com/rust-lang/rust/pull/134300) | 
|  | 107 | +- [The future incompatibility lint `cenum_impl_drop_cast` has been made into a hard error.](https://github.com/rust-lang/rust/pull/135964) This means it is now an error to cast a field-less enum to an integer if the enum implements `Drop`. | 
|  | 108 | +- [SSE2 is now required for "i686" 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually.](https://github.com/rust-lang/rust/pull/137037) | 
|  | 109 | +  To compile for pre-SSE2 32-bit x86, use a "i586" target instead. | 
|  | 110 | + | 
|  | 111 | +<a id="1.86.0-Internal-Changes"></a> | 
|  | 112 | + | 
|  | 113 | +Internal Changes | 
|  | 114 | +---------------- | 
|  | 115 | + | 
|  | 116 | +These changes do not affect any public interfaces of Rust, but they represent | 
|  | 117 | +significant improvements to the performance or internals of rustc and related | 
|  | 118 | +tools. | 
|  | 119 | + | 
|  | 120 | +- [Build the rustc on AArch64 Linux with ThinLTO + PGO.](https://github.com/rust-lang/rust/pull/133807) | 
|  | 121 | +  The ARM 64-bit compiler (AArch64) on Linux is now optimized with ThinLTO and PGO, similar to the optimizations we have already performed for the x86-64 compiler on Linux. This should make it up to 30% faster. | 
|  | 122 | + | 
|  | 123 | + | 
| 1 | 124 | Version 1.85.1 (2025-03-18) | 
| 2 | 125 | ========================== | 
| 3 | 126 | 
 | 
|  | 
0 commit comments