|
| 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 | + |
| 124 | +Version 1.85.1 (2025-03-18) |
| 125 | +========================== |
| 126 | + |
| 127 | +<a id="1.85.1"></a> |
| 128 | +- [Fix the doctest-merging feature of the 2024 Edition.](https://github.com/rust-lang/rust/pull/137899/) |
| 129 | +- [Relax some `target_feature` checks when generating docs.](https://github.com/rust-lang/rust/pull/137632/) |
| 130 | +- [Fix errors in `std::fs::rename` on Windows 10, version 1607.](https://github.com/rust-lang/rust/pull/137528/) |
| 131 | +- [Downgrade bootstrap `cc` to fix custom targets.](https://github.com/rust-lang/rust/pull/137460/) |
| 132 | +- [Skip submodule updates when building Rust from a source tarball.](https://github.com/rust-lang/rust/pull/137338/) |
| 133 | +Version 1.85.0 (2025-02-20) |
| 134 | +========================== |
| 135 | +<a id="1.85.0-Language"></a> |
| 136 | +Language |
| 137 | +-------- |
| 138 | +- [The 2024 Edition is now stable.](https://github.com/rust-lang/rust/pull/133349) |
| 139 | + See [the edition guide](https://doc.rust-lang.org/nightly/edition-guide/rust-2024/index.html) for more details. |
| 140 | +- [Stabilize async closures](https://github.com/rust-lang/rust/pull/132706) |
| 141 | + See [RFC 3668](https://rust-lang.github.io/rfcs/3668-async-closures.html) for more details. |
| 142 | +- [Stabilize `#[diagnostic::do_not_recommend]`](https://github.com/rust-lang/rust/pull/132056) |
| 143 | +- [Add `unpredictable_function_pointer_comparisons` lint to warn against function pointer comparisons](https://github.com/rust-lang/rust/pull/118833) |
| 144 | +- [Lint on combining `#[no_mangle]` and `#[export_name]` attributes.](https://github.com/rust-lang/rust/pull/131558) |
| 145 | +<a id="1.85.0-Compiler"></a> |
| 146 | +Compiler |
| 147 | +-------- |
| 148 | +- [The unstable flag `-Zpolymorphize` has been removed](https://github.com/rust-lang/rust/pull/133883), see https://github.com/rust-lang/compiler-team/issues/810 for some background. |
| 149 | +<a id="1.85.0-Platform-Support"></a> |
| 150 | +Platform Support |
| 151 | +---------------- |
| 152 | +- [Promote `powerpc64le-unknown-linux-musl` to tier 2 with host tools](https://github.com/rust-lang/rust/pull/133801) |
| 153 | +Refer to Rust's [platform support page][platform-support-doc] |
| 154 | +for more information on Rust's tiered platform support. |
| 155 | +<a id="1.85.0-Libraries"></a> |
| 156 | +Libraries |
| 157 | +--------- |
| 158 | +- [Panics in the standard library now have a leading `library/` in their path](https://github.com/rust-lang/rust/pull/132390) |
| 159 | +- [`std::env::home_dir()` on Windows now ignores the non-standard `$HOME` environment variable](https://github.com/rust-lang/rust/pull/132515) |
| 160 | + It will be un-deprecated in a subsequent release. |
| 161 | +- [Add `AsyncFn*` to the prelude in all editions.](https://github.com/rust-lang/rust/pull/132611) |
| 162 | +<a id="1.85.0-Stabilized-APIs"></a> |
| 163 | +Stabilized APIs |
| 164 | +--------------- |
| 165 | +- [`BuildHasherDefault::new`](https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new) |
| 166 | +- [`ptr::fn_addr_eq`](https://doc.rust-lang.org/std/ptr/fn.fn_addr_eq.html) |
| 167 | +- [`io::ErrorKind::QuotaExceeded`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.QuotaExceeded) |
| 168 | +- [`io::ErrorKind::CrossesDevices`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.CrossesDevices) |
| 169 | +- [`{float}::midpoint`](https://doc.rust-lang.org/core/primitive.f32.html#method.midpoint) |
| 170 | +- [Unsigned `{integer}::midpoint`](https://doc.rust-lang.org/std/primitive.u64.html#method.midpoint) |
| 171 | +- [`NonZeroU*::midpoint`](https://doc.rust-lang.org/std/num/type.NonZeroU32.html#method.midpoint) |
| 172 | +- [impl `std::iter::Extend` for tuples with arity 1 through 12](https://doc.rust-lang.org/stable/std/iter/trait.Extend.html#impl-Extend%3C(A,)%3E-for-(EA,)) |
| 173 | +- [`FromIterator<(A, ...)>` for tuples with arity 1 through 12](https://doc.rust-lang.org/stable/std/iter/trait.FromIterator.html#impl-FromIterator%3C(EA,)%3E-for-(A,)) |
| 174 | +- [`std::task::Waker::noop`](https://doc.rust-lang.org/stable/std/task/struct.Waker.html#method.noop) |
| 175 | +These APIs are now stable in const contexts: |
| 176 | +- [`mem::size_of_val`](https://doc.rust-lang.org/stable/std/mem/fn.size_of_val.html) |
| 177 | +- [`mem::align_of_val`](https://doc.rust-lang.org/stable/std/mem/fn.align_of_val.html) |
| 178 | +- [`Layout::for_value`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.for_value) |
| 179 | +- [`Layout::align_to`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.align_to) |
| 180 | +- [`Layout::pad_to_align`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.pad_to_align) |
| 181 | +- [`Layout::extend`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.extend) |
| 182 | +- [`Layout::array`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.array) |
| 183 | +- [`std::mem::swap`](https://doc.rust-lang.org/stable/std/mem/fn.swap.html) |
| 184 | +- [`std::ptr::swap`](https://doc.rust-lang.org/stable/std/ptr/fn.swap.html) |
| 185 | +- [`NonNull::new`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.new) |
| 186 | +- [`HashMap::with_hasher`](https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html#method.with_hasher) |
| 187 | +- [`HashSet::with_hasher`](https://doc.rust-lang.org/stable/std/collections/struct.HashSet.html#method.with_hasher) |
| 188 | +- [`BuildHasherDefault::new`](https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new) |
| 189 | +- [`<float>::recip`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.recip) |
| 190 | +- [`<float>::to_degrees`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_degrees) |
| 191 | +- [`<float>::to_radians`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_radians) |
| 192 | +- [`<float>::max`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.max) |
| 193 | +- [`<float>::min`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.min) |
| 194 | +- [`<float>::clamp`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.clamp) |
| 195 | +- [`<float>::abs`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.abs) |
| 196 | +- [`<float>::signum`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.signum) |
| 197 | +- [`<float>::copysign`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.copysign) |
| 198 | +- [`MaybeUninit::write`](https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.write) |
| 199 | +<a id="1.85.0-Cargo"></a> |
| 200 | +Cargo |
| 201 | +----- |
| 202 | +- [Add future-incompatibility warning against keywords in cfgs and add raw-idents](https://github.com/rust-lang/cargo/pull/14671/) |
| 203 | +- [Stabilize higher precedence trailing flags](https://github.com/rust-lang/cargo/pull/14900/) |
| 204 | +- [Pass `CARGO_CFG_FEATURE` to build scripts](https://github.com/rust-lang/cargo/pull/14902/) |
| 205 | +<a id="1.85.0-Rustdoc"></a> |
| 206 | +Rustdoc |
| 207 | +----- |
| 208 | +- [Doc comment on impl blocks shows the first line, even when the impl block is collapsed](https://github.com/rust-lang/rust/pull/132155) |
| 209 | +<a id="1.85.0-Compatibility-Notes"></a> |
| 210 | +Compatibility Notes |
| 211 | +------------------- |
| 212 | +- [`rustc` no longer treats the `test` cfg as a well known check-cfg](https://github.com/rust-lang/rust/pull/131729), instead it is up to the build systems and users of `--check-cfg`[^check-cfg] to set it as a well known cfg using `--check-cfg=cfg(test)`. |
| 213 | + This is done to enable build systems like Cargo to set it conditionally, as not all source files are suitable for unit tests. |
| 214 | + [Cargo (for now) unconditionally sets the `test` cfg as a well known cfg](https://github.com/rust-lang/cargo/pull/14963). |
| 215 | + [^check-cfg]: https://doc.rust-lang.org/nightly/rustc/check-cfg.html |
| 216 | +- [Disable potentially incorrect type inference if there are trivial and non-trivial where-clauses](https://github.com/rust-lang/rust/pull/132325) |
| 217 | +- `std::env::home_dir()` has been deprecated for years, because it can give surprising results in some Windows configurations if the `HOME` environment variable is set (which is not the normal configuration on Windows). We had previously avoided changing its behavior, out of concern for compatibility with code depending on this non-standard configuration. Given how long this function has been deprecated, we're now fixing its behavior as a bugfix. A subsequent release will remove the deprecation for this function. |
| 218 | +- [Make `core::ffi::c_char` signedness more closely match that of the platform-default `char`](https://github.com/rust-lang/rust/pull/132975) |
| 219 | + This changed `c_char` from an `i8` to `u8` or vice versa on many Tier 2 and 3 |
| 220 | + targets (mostly Arm and RISC-V embedded targets). The new definition may |
| 221 | + result in compilation failures but fixes compatibility issues with C. |
| 222 | + The `libc` crate matches this change as of its 0.2.169 release. |
| 223 | +- [When compiling a nested `macro_rules` macro from an external crate, the content of the inner `macro_rules` is now built with the edition of the external crate, not the local crate.](https://github.com/rust-lang/rust/pull/133274) |
| 224 | +- [Increase `sparcv9-sun-solaris` and `x86_64-pc-solaris` Solaris baseline to 11.4.](https://github.com/rust-lang/rust/pull/133293) |
| 225 | +- [Show `abi_unsupported_vector_types` lint in future breakage reports](https://github.com/rust-lang/rust/pull/133374) |
| 226 | +- [Error if multiple super-trait instantiations of `dyn Trait` need associated types to be specified but only one is provided](https://github.com/rust-lang/rust/pull/133392) |
| 227 | +- [Change `powerpc64-ibm-aix` default `codemodel` to large](https://github.com/rust-lang/rust/pull/133811) |
| 228 | +<a id="1.85.0-Internal-Changes"></a> |
| 229 | +Internal Changes |
| 230 | +---------------- |
| 231 | +These changes do not affect any public interfaces of Rust, but they represent |
| 232 | +significant improvements to the performance or internals of rustc and related |
| 233 | +tools. |
| 234 | +- [Build `x86_64-unknown-linux-gnu` with LTO for C/C++ code (e.g., `jemalloc`)](https://github.com/rust-lang/rust/pull/134690) |
| 235 | + |
1 | 236 | Version 1.84.1 (2025-01-30)
|
2 | 237 | ==========================
|
3 | 238 |
|
|
0 commit comments