-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Add release notes for 1.86.0 #139002
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Add release notes for 1.86.0 #139002
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,126 @@ | ||
Version 1.86.0 (2025-04-03) | ||
========================== | ||
|
||
<a id="1.86.0-Language"></a> | ||
|
||
Language | ||
-------- | ||
- [Stabilize upcasting trait objects to supertraits.](https://github.com/rust-lang/rust/pull/134367) | ||
- [Allow safe functions to be marked with the `#[target_feature]` attribute.](https://github.com/rust-lang/rust/pull/134090) | ||
- [The `missing_abi` lint now warns-by-default.](https://github.com/rust-lang/rust/pull/132397) | ||
- 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) | ||
- [More pointers are now detected as definitely not-null based on their alignment in const eval.](https://github.com/rust-lang/rust/pull/133700) | ||
- [Empty `repr()` attribute applied to invalid items are now correctly rejected.](https://github.com/rust-lang/rust/pull/133925) | ||
- [Inner attributes `#![test]` and `#![rustfmt::skip]` are no longer accepted in more places than intended.](https://github.com/rust-lang/rust/pull/134276) | ||
|
||
<a id="1.86.0-Compiler"></a> | ||
|
||
Compiler | ||
-------- | ||
- [Debug-assert that raw pointers are non-null on access.](https://github.com/rust-lang/rust/pull/134424) | ||
- [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) | ||
- [Fix emission of `overflowing_literals` under certain macro environments.](https://github.com/rust-lang/rust/pull/136393) | ||
|
||
<a id="1.86.0-Platform-Support"></a> | ||
|
||
Platform Support | ||
---------------- | ||
- [Replace `i686-unknown-redox` target with `i586-unknown-redox`.](https://github.com/rust-lang/rust/pull/136698) | ||
- [Increase baseline CPU of `i686-unknown-hurd-gnu` to Pentium 4.](https://github.com/rust-lang/rust/pull/136700) | ||
- New tier 3 targets: | ||
- [`{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock`](https://github.com/rust-lang/rust/pull/133631). | ||
For supporting Neutrino QNX 7.1 with `io-socket` network stack. | ||
- [`{aarch64-unknown,x86_64-pc}-nto-qnx800`](https://github.com/rust-lang/rust/pull/133631). | ||
For supporting Neutrino QNX 8.0 (`no_std`-only). | ||
- [`{x86_64,i686}-win7-windows-gnu`](https://github.com/rust-lang/rust/pull/134609). | ||
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. | ||
- [`amdgcn-amd-amdhsa`](https://github.com/rust-lang/rust/pull/134740). | ||
- [`x86_64-pc-cygwin`](https://github.com/rust-lang/rust/pull/134999). | ||
- [`{mips,mipsel}-mti-none-elf`](https://github.com/rust-lang/rust/pull/135074). | ||
Initial bare-metal support. | ||
- [`m68k-unknown-none-elf`](https://github.com/rust-lang/rust/pull/135085). | ||
- [`armv7a-nuttx-{eabi,eabihf}`, `aarch64-unknown-nuttx`, and `thumbv7a-nuttx-{eabi,eabihf}`](https://github.com/rust-lang/rust/pull/135757). | ||
|
||
Refer to Rust's [platform support page][platform-support-doc] | ||
for more information on Rust's tiered platform support. | ||
|
||
<a id="1.86.0-Libraries"></a> | ||
|
||
Libraries | ||
--------- | ||
- 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. | ||
- [Remove `RustcDecodable` and `RustcEncodable`.](https://github.com/rust-lang/rust/pull/134272) | ||
- [Deprecate libtest's `--logfile` option.](https://github.com/rust-lang/rust/pull/134283) | ||
- [On recent versions of Windows, `std::fs::remove_file` will now remove read-only files.](https://github.com/rust-lang/rust/pull/134679) | ||
|
||
<a id="1.86.0-Stabilized-APIs"></a> | ||
|
||
Stabilized APIs | ||
--------------- | ||
|
||
- [`{float}::next_down`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_down) | ||
- [`{float}::next_up`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_up) | ||
- [`<[_]>::get_disjoint_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_mut) | ||
- [`<[_]>::get_disjoint_unchecked_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_unchecked_mut) | ||
- [`slice::GetDisjointMutError`](https://doc.rust-lang.org/stable/std/slice/enum.GetDisjointMutError.html) | ||
- [`HashMap::get_disjoint_mut`](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_mut) | ||
- [`HashMap::get_disjoint_unchecked_mut`](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_unchecked_mut) | ||
- [`NonZero::count_ones`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.count_ones) | ||
- [`Vec::pop_if`](https://doc.rust-lang.org/std/vec/struct.Vec.html#method.pop_if) | ||
- [`sync::Once::wait`](https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait) | ||
- [`sync::Once::wait_force`](https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait_force) | ||
- [`sync::OnceLock::wait`](https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html#method.wait) | ||
|
||
These APIs are now stable in const contexts: | ||
|
||
- [`hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html) | ||
- [`io::Cursor::get_mut`](https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_mut) | ||
- [`io::Cursor::set_position`](https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.set_position) | ||
- [`str::is_char_boundary`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.is_char_boundary) | ||
- [`str::split_at`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at) | ||
- [`str::split_at_checked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_checked) | ||
- [`str::split_at_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut) | ||
- [`str::split_at_mut_checked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut_checked) | ||
|
||
<a id="1.86.0-Cargo"></a> | ||
|
||
Cargo | ||
----- | ||
- [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/) | ||
- [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. | ||
- [Deprecate the token argument in `cargo login` to avoid shell history leaks.](https://github.com/rust-lang/cargo/pull/15057/) | ||
- [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. | ||
|
||
<a id="1.86.0-Rustdoc"></a> | ||
|
||
Rustdoc | ||
----- | ||
- [Add a sans-serif font setting.](https://github.com/rust-lang/rust/pull/133636) | ||
|
||
<a id="1.86.0-Compatibility-Notes"></a> | ||
|
||
Compatibility Notes | ||
------------------- | ||
- [The `wasm_c_abi` future compatibility warning is now a hard error.](https://github.com/rust-lang/rust/pull/133951) | ||
Users of `wasm-bindgen` should upgrade to at least version 0.2.89, otherwise compilation will fail. | ||
- [Remove long-deprecated no-op attributes `#![no_start]` and `#![crate_id]`.](https://github.com/rust-lang/rust/pull/134300) | ||
- [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`. | ||
- [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) | ||
Mark-Simulacrum marked this conversation as resolved.
Show resolved
Hide resolved
cuviper marked this conversation as resolved.
Show resolved
Hide resolved
|
||
To compile for pre-SSE2 32-bit x86, use a "i586" target instead. | ||
Comment on lines
+102
to
+109
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A bit late now (I'm not sure I want to stop the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I was wondering how we missed this PR (#134272), but it is there quietly in the "Libraries" section. Yes, we should add a compat note as well, and let's do that as a followup -- on master only at this point, but that will also render in GitHub releases, at least. |
||
|
||
<a id="1.86.0-Internal-Changes"></a> | ||
|
||
Internal Changes | ||
---------------- | ||
|
||
These changes do not affect any public interfaces of Rust, but they represent | ||
significant improvements to the performance or internals of rustc and related | ||
tools. | ||
|
||
- [Build the rustc on AArch64 Linux with ThinLTO + PGO.](https://github.com/rust-lang/rust/pull/133807) | ||
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. | ||
|
||
|
||
Version 1.85.1 (2025-03-18) | ||
========================== | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this note correct and telling the whole story? I am just now noticing that nightly (i.e. ~1.87) is warning about a lint named
wasm_c_abi
, which presumably reflects recent PR #138601. Is what's going on that there are two ABI changes and lints which happen to share the same lint name? If so, it might be worth a sentence to clarify the situation for users who use both stable and nightly.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This note corresponds to #133951
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it seems confusing that we turned a FCW Into a hard error and then added new FCWs to the same lint that was previously hard errored