Repository navigation
Draft release notes for 1.86.0 #138795
Copy link
Copy link
Closed
Labels
T-releaseRelevant to the release subteam, which will review and decide on the PR/issue.Relevant to the release subteam, which will review and decide on the PR/issue.relnotes-tracking-issueMarks issues tracking what text to put in release notes.Marks issues tracking what text to put in release notes.
Milestone
Description
Update: This has now moved to a pull request -- #139002.
NOTE: We are trying this issue as a new way to work on the draft release notes.
Use the 📝 links to edit those that have a relnotes-tracking-issue,
and they will be updated when we regenerate the notes periodically.
cc @rust-lang/release
Version 1.86.0 (2025-04-03)
Language
- 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 asdouble_negations.
📝 - The
missing_abilint now warns-by-default.
📝 - More pointers are now detected as definitely not-null based on their alignment in const eval.
📝 - Empty
repr()attribute applied to invalid items are now correctly rejected.
📝 - Allow safe functions to be marked with the
#[target_feature]attribute.
📝 - Inner attributes
#![test]and#![rustfmt::skip]are no longer accepted in more places than intended.
📝 - Stabilize the ability to upcast a trait object to one of its supertraits.
📝
Compiler
- Debug-assert that raw pointers are non-null on access.
📝 - Change
-Oto mean-C opt-level=3instead of-C opt-level=2to match Cargo's defaults.
📝 - Fix emission of
overflowing_literalsunder certain macro environments.
📝
Platform Support
- Add new Tier 3 targets
{aarch64-unknown,x86_64-pc}-nto-qnx710_iosockfor supporting Neutrino QNX 7.1 withio-socketnetwork stack. - Add new Tier 3 targets
{aarch64-unknown,x86_64-pc}-nto-qnx800for supporting Neutrino QNX 8.0no_stdonly.
📝 - Add new Tier 3 targets
{x86_64,i686}-win7-windows-gnu.
These targets are intended for backwards compatibility with Windows 7.{x86_64,i686}-win7-windows-msvcare the Windows MSVC counterparts that already exist as Tier 3 targets.
📝 - Add new Tier 3 target
amdgcn-amd-amdhsa.
📝 - Add new Tier 3 target
x86_64-pc-cygwin.
📝 - Add new Tier 3 targets
{mips,mipsel}-mti-none-elf(initial bare-metal support).
📝 - Add new Tier 3 target
m68k-unknown-none-elf.
📝 - Add new Tier 3 targets
armv7a-nuttx-{eabi,eabihf},aarch64-unknown-nuttx, andthumbv7a-nuttx-{eabi,eabihf}.
📝 - Replace
i686-unknown-redoxtarget withi586-unknown-redox.
📝 - Increase baseline CPU of
i686-unknown-hurd-gnuto Pentium 4.
📝
Refer to Rust's platform support page
for more information on Rust's tiered platform support.
Libraries
- The type of
FromBytesWithNulErrorinCStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>was changed from an opaque struct to an enum, allowing users to examine why the conversion failed.
📝 - Remove
RustcDecodableandRustcEncodable.
📝 - Deprecate libtest's
--logfileoption.
📝 - On recent versions of Windows,
std::fs::remove_filewill now remove read-only files.
📝
Stabilized APIs
{float}::next_down{float}::next_up
📝HashMap::get_disjoint_mutHashMap::get_disjoint_unchecked_mut
📝NonZero::count_ones
📝Vec::pop_if
📝sync::Once::waitsync::Once::wait_forcesync::OnceLock::wait
📝<[_]>::get_disjoint_mut<[_]>::get_disjoint_unchecked_mutslice::GetDisjointMutError
📝
These APIs are now stable in const contexts:
io::Cursor::get_mutio::Cursor::set_position
📝str::is_char_boundarystr::split_atstr::split_at_checkedstr::split_at_mutstr::split_at_mut_checked
📝hint::black_box
📝
Cargo
Rustdoc
Compatibility Notes
- The
wasm_c_abifuture compatibility warning is now a hard error.
Users ofwasm-bindgenshould upgrade to at least version 0.2.89, otherwise compilation will fail.
📝 - Remove long-deprecated no-op attributes
#![no_start]and#![crate_id].
📝 - The future incompatibility lint
cenum_impl_drop_casthas been made into a hard error. This means it is now an error to cast a field-less enum to an integer if the enum implementsDrop.
📝 - SSE2 is now required for "i686" 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually.
📝
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.
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.
📝
Other
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
T-releaseRelevant to the release subteam, which will review and decide on the PR/issue.Relevant to the release subteam, which will review and decide on the PR/issue.relnotes-tracking-issueMarks issues tracking what text to put in release notes.Marks issues tracking what text to put in release notes.
Activity
[-]Tracking issue for 1.86.0 release notes[/-][+]Draft release notes for 1.86.0[/+]cuviper commentedon Mar 21, 2025
@rustbot ping relnotes-interest-group
rustbot commentedon Mar 21, 2025
Hi relnotes-interest-group, this PR adds release notes. Could you review this PR
if you have time? Thanks <3
cc @alex-semenyuk @jieyouxu @joshtriplett @lcnr @traviscross
joshtriplett commentedon Mar 21, 2025
Made several updates. The new system and process, of editing the underlying relnotes tracking issues and regenerating the release notes from those, seems like a great improvement!
jieyouxu commentedon Mar 22, 2025
This is much easier to find the actual PR <-> relnotes tracking issue ❤
I made several edits to the underlying relnotes as well.
One nit for the "Stabilized APIs" section is to maybe fully qualify them, i.e.
std::sync::Once::waitvs inherent methods on primitive types like{float}::round_down, but maybe that's too noisy.cuviper commentedon Mar 22, 2025
I usually only qualify enough to disambiguate it, but I forgot in this case there's also an
iter::Once. Issync::Once::waitclear enough to you, or do you think it should really have the full path?(I also tend to leave the crate out when it's available in both
coreandstd, but that doesn't apply in this case.)jieyouxu commentedon Mar 22, 2025
I think the short form is good enough (or rather, better since it's less noisy) especially if we already have links to the docs anyway. But in the case of potential ambiguity like
iter::Oncevssync::Once, the extra segment(s) likesync::Oncemight be nice yeah.Yes, that's perfectly clear to me.
cuviper commentedon Mar 22, 2025
Ok, I updated that, and
sync::OnceLockwith it just for local consistency, even though that's not ambiguous.jieyouxu commentedon Mar 22, 2025
(Changed #138810, #138809 and #138813 to say "Add new Tier 3 target(s) ..." for consistency because apparently I also can't make up my mind if the "target(s)" bit goes before or after the target tuples.)
WaffleLapkin commentedon Mar 23, 2025
Is this correctly included? From the PR description it sounds like this bug never hit stable. cc @apiraino @oli-obk
cuviper commentedon Mar 23, 2025
#137893 indicates that the lint did change between stable (1.85) and beta (1.86). Maybe this isn't significant enough for a release note -- then close that tracking issue #138715 -- but I'd prefer to let @oli-obk decide.
jieyouxu commentedon Mar 23, 2025
EDIT: now reading back the issues I'm no longer sure, so Oli probably need to review the note.
oli-obk commentedon Mar 24, 2025
The bugfix PR accidentally made another unrelated bugfix, which was what was found on crater. I didn't think it needed relnotes, but when the relnotes label was added I added a description. It's pretty minor considering what you need to to do trigger the new (correct) emission of the lint.
jieyouxu commentedon Mar 24, 2025
Maybe sth like "Fix emission of
overflowing_literalsunder certain macro environments" instead, since that's the crater bit right?EDIT: edited
cuviper commentedon Mar 26, 2025
Please use #139002 for further updates, especially for things like the list order which the auto-generated notes don't handle. I already made a few adjustments in that regard.
Rollup merge of rust-lang#139002 - cuviper:relnotes-1.86.0, r=BoxyUwU
Rollup merge of rust-lang#139002 - cuviper:relnotes-1.86.0, r=BoxyUwU
Rollup merge of rust-lang#139002 - cuviper:relnotes-1.86.0, r=BoxyUwU
Rollup merge of rust-lang#139002 - cuviper:relnotes-1.86.0, r=BoxyUwU
Unrolled build for rust-lang#139002