Auto merge of #97084 - Mark-Simulacrum:stable-next, r=Mark-Simulacrum
[stable] Rust 1.61 * Cherry-picking release notes from not yet landed #96539. r? `@Mark-Simulacrum`
This commit is contained in:
commit
66a356df85
2 changed files with 289 additions and 1 deletions
288
RELEASES.md
288
RELEASES.md
|
|
@ -1,3 +1,291 @@
|
|||
Version 1.61.0 (2022-05-19)
|
||||
==========================
|
||||
|
||||
Language
|
||||
--------
|
||||
|
||||
- [`const fn` signatures can now include generic trait bounds][93827]
|
||||
- [`const fn` signatures can now use `impl Trait` in argument and return position][93827]
|
||||
- [Function pointers can now be created, cast, and passed around in a `const fn`][93827]
|
||||
- [Recursive calls can now set the value of a function's opaque `impl Trait` return type][94081]
|
||||
|
||||
Compiler
|
||||
--------
|
||||
|
||||
- [Linking modifier syntax in `#[link]` attributes and on the command line, as well as the `whole-archive` modifier specifically, are now supported][93901]
|
||||
- [The `char` type is now described as UTF-32 in debuginfo][89887]
|
||||
- The [`#[target_feature]`][target_feature] attribute [can now be used with aarch64 features][90621]
|
||||
- X86 [`#[target_feature = "adx"]` is now stable][93745]
|
||||
|
||||
Libraries
|
||||
---------
|
||||
|
||||
- [`ManuallyDrop<T>` is now documented to have the same layout as `T`][88375]
|
||||
- [`#[ignore = "…"]` messages are printed when running tests][92714]
|
||||
- [Consistently present absent stdio handles on Windows as NULL handles][93263]
|
||||
- [Make `std::io::stdio::lock()` return `'static` handles.][93965] Previously, the creation of locked handles to stdin/stdout/stderr would borrow the handles being locked, which prevented writing `let out = std::io::stdout().lock();` because `out` would outlive the return value of `stdout()`. Such code now works, eliminating a common pitfall that affected many Rust users.
|
||||
- [`Vec::from_raw_parts` is now less restrictive about its inputs][95016]
|
||||
- [`std::thread::available_parallelism` now takes cgroup quotas into account.][92697] Since `available_parallelism` is often used to create a thread pool for parallel computation, which may be CPU-bound for performance, `available_parallelism` will return a value consistent with the ability to use that many threads continuously, if possible. For instance, in a container with 8 virtual CPUs but quotas only allowing for 50% usage, `available_parallelism` will return 4.
|
||||
|
||||
Stabilized APIs
|
||||
---------------
|
||||
|
||||
- [`Pin::static_mut`]
|
||||
- [`Pin::static_ref`]
|
||||
- [`Vec::retain_mut`]
|
||||
- [`VecDeque::retain_mut`]
|
||||
- [`Write` for `Cursor<[u8; N]>`][cursor-write-array]
|
||||
- [`std::os::unix::net::SocketAddr::from_pathname`]
|
||||
- [`std::process::ExitCode`] and [`std::process::Termination`]. The stabilization of these two APIs now makes it possible for programs to return errors from `main` with custom exit codes.
|
||||
- [`std::thread::JoinHandle::is_finished`]
|
||||
|
||||
These APIs are now usable in const contexts:
|
||||
|
||||
- [`*const T::offset` and `*mut T::offset`][ptr-offset]
|
||||
- [`*const T::wrapping_offset` and `*mut T::wrapping_offset`][ptr-wrapping_offset]
|
||||
- [`*const T::add` and `*mut T::add`][ptr-add]
|
||||
- [`*const T::sub` and `*mut T::sub`][ptr-sub]
|
||||
- [`*const T::wrapping_add` and `*mut T::wrapping_add`][ptr-wrapping_add]
|
||||
- [`*const T::wrapping_sub` and `*mut T::wrapping_sub`][ptr-wrapping_sub]
|
||||
- [`[T]::as_mut_ptr`][slice-as_mut_ptr]
|
||||
- [`[T]::as_ptr_range`][slice-as_ptr_range]
|
||||
- [`[T]::as_mut_ptr_range`][slice-as_mut_ptr_range]
|
||||
|
||||
Cargo
|
||||
-----
|
||||
|
||||
No feature changes, but see compatibility notes.
|
||||
|
||||
Compatibility Notes
|
||||
-------------------
|
||||
|
||||
- Previously native static libraries were linked as `whole-archive` in some cases, but now rustc tries not to use `whole-archive` unless explicitly requested. This [change][93901] may result in linking errors in some cases. To fix such errors, native libraries linked from the command line, build scripts, or [`#[link]` attributes][link-attr] need to
|
||||
- (more common) either be reordered to respect dependencies between them (if `a` depends on `b` then `a` should go first and `b` second)
|
||||
- (less common) or be updated to use the [`+whole-archive`] modifier.
|
||||
- [Catching a second unwind from FFI code while cleaning up from a Rust panic now causes the process to abort][92911]
|
||||
- [Proc macros no longer see `ident` matchers wrapped in groups][92472]
|
||||
- [The number of `#` in `r#` raw string literals is now required to be less than 256][95251]
|
||||
- [When checking that a dyn type satisfies a trait bound, supertrait bounds are now enforced][92285]
|
||||
- [`cargo vendor` now only accepts one value for each `--sync` flag][cargo/10448]
|
||||
- [`cfg` predicates in `all()` and `any()` are always evaluated to detect errors, instead of short-circuiting.][94295] The compatibility considerations here arise in nightly-only code that used the short-circuiting behavior of `all` to write something like `cfg(all(feature = "nightly", syntax-requiring-nightly))`, which will now fail to compile. Instead, use either `cfg_attr(feature = "nightly", ...)` or nested uses of `cfg`.
|
||||
- [bootstrap: static-libstdcpp is now enabled by default, and can now be disabled when llvm-tools is enabled][94832]
|
||||
|
||||
Internal Changes
|
||||
----------------
|
||||
|
||||
These changes provide no direct user facing benefits, but represent significant
|
||||
improvements to the internals and overall performance of rustc
|
||||
and related tools.
|
||||
|
||||
- [debuginfo: Refactor debuginfo generation for types][94261]
|
||||
- [Remove the everybody loops pass][93913]
|
||||
|
||||
[88375]: https://github.com/rust-lang/rust/pull/88375/
|
||||
[89887]: https://github.com/rust-lang/rust/pull/89887/
|
||||
[90621]: https://github.com/rust-lang/rust/pull/90621/
|
||||
[92285]: https://github.com/rust-lang/rust/pull/92285/
|
||||
[92472]: https://github.com/rust-lang/rust/pull/92472/
|
||||
[92663]: https://github.com/rust-lang/rust/pull/92663/
|
||||
[92697]: https://github.com/rust-lang/rust/pull/92697/
|
||||
[92714]: https://github.com/rust-lang/rust/pull/92714/
|
||||
[92911]: https://github.com/rust-lang/rust/pull/92911/
|
||||
[93263]: https://github.com/rust-lang/rust/pull/93263/
|
||||
[93580]: https://github.com/rust-lang/rust/pull/93580/
|
||||
[93745]: https://github.com/rust-lang/rust/pull/93745/
|
||||
[93827]: https://github.com/rust-lang/rust/pull/93827/
|
||||
[93840]: https://github.com/rust-lang/rust/pull/93840/
|
||||
[93901]: https://github.com/rust-lang/rust/pull/93901/
|
||||
[93913]: https://github.com/rust-lang/rust/pull/93913/
|
||||
[93957]: https://github.com/rust-lang/rust/pull/93957/
|
||||
[93965]: https://github.com/rust-lang/rust/pull/93965/
|
||||
[94081]: https://github.com/rust-lang/rust/pull/94081/
|
||||
[94261]: https://github.com/rust-lang/rust/pull/94261/
|
||||
[94295]: https://github.com/rust-lang/rust/pull/94295/
|
||||
[94356]: https://github.com/rust-lang/rust/pull/94356/
|
||||
[94832]: https://github.com/rust-lang/rust/pull/94832/
|
||||
[95016]: https://github.com/rust-lang/rust/pull/95016/
|
||||
[95130]: https://github.com/rust-lang/rust/pull/95130/
|
||||
[95251]: https://github.com/rust-lang/rust/pull/95251/
|
||||
[95491]: https://github.com/rust-lang/rust/pull/95491/
|
||||
[`+whole-archive`]: https://doc.rust-lang.org/stable/rustc/command-line-arguments.html#linking-modifiers-whole-archive
|
||||
[`Pin::static_mut`]: https://doc.rust-lang.org/stable/std/pin/struct.Pin.html#method.static_mut
|
||||
[`Pin::static_ref`]: https://doc.rust-lang.org/stable/std/pin/struct.Pin.html#method.static_ref
|
||||
[`Vec::retain_mut`]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.retain_mut
|
||||
[`VecDeque::retain_mut`]: https://doc.rust-lang.org/stable/std/collections/struct.VecDeque.html#method.retain_mut
|
||||
[`std::os::unix::net::SocketAddr::from_pathname`]: https://doc.rust-lang.org/stable/std/os/unix/net/struct.SocketAddr.html#method.from_pathname
|
||||
[`std::process::ExitCode`]: https://doc.rust-lang.org/stable/std/process/struct.ExitCode.html
|
||||
[`std::process::Termination`]: https://doc.rust-lang.org/stable/std/process/trait.Termination.html
|
||||
[`std::thread::JoinHandle::is_finished`]: https://doc.rust-lang.org/stable/std/thread/struct.JoinHandle.html#method.is_finished
|
||||
[cargo/10448]: https://github.com/rust-lang/cargo/pull/10448/
|
||||
[cursor-write-array]: https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#impl-Write-4
|
||||
[link-attr]: https://doc.rust-lang.org/stable/reference/items/external-blocks.html#the-link-attribute
|
||||
[ptr-add]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.add
|
||||
[ptr-offset]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset
|
||||
[ptr-sub]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.sub
|
||||
[ptr-wrapping_add]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.wrapping_add
|
||||
[ptr-wrapping_offset]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.wrapping_offset
|
||||
[ptr-wrapping_sub]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.wrapping_sub
|
||||
[slice-as_mut_ptr]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_mut_ptr
|
||||
[slice-as_mut_ptr_range]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_mut_ptr_range
|
||||
[slice-as_ptr_range]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_ptr_range
|
||||
[target_feature]: https://doc.rust-lang.org/reference/attributes/codegen.html#the-target_feature-attribute
|
||||
|
||||
|
||||
Version 1.60.0 (2022-04-07)
|
||||
==========================
|
||||
|
||||
Language
|
||||
--------
|
||||
- [Stabilize `#[cfg(panic = "...")]` for either `"unwind"` or `"abort"`.][93658]
|
||||
- [Stabilize `#[cfg(target_has_atomic = "...")]` for each integer size and `"ptr"`.][93824]
|
||||
|
||||
Compiler
|
||||
--------
|
||||
- [Enable combining `+crt-static` and `relocation-model=pic` on `x86_64-unknown-linux-gnu`][86374]
|
||||
- [Fixes wrong `unreachable_pub` lints on nested and glob public reexport][87487]
|
||||
- [Stabilize `-Z instrument-coverage` as `-C instrument-coverage`][90132]
|
||||
- [Stabilize `-Z print-link-args` as `--print link-args`][91606]
|
||||
- [Add new Tier 3 target `mips64-openwrt-linux-musl`\*][92300]
|
||||
- [Add new Tier 3 target `armv7-unknown-linux-uclibceabi` (softfloat)\*][92383]
|
||||
- [Fix invalid removal of newlines from doc comments][92357]
|
||||
- [Add kernel target for RustyHermit][92670]
|
||||
- [Deny mixing bin crate type with lib crate types][92933]
|
||||
- [Make rustc use `RUST_BACKTRACE=full` by default][93566]
|
||||
- [Upgrade to LLVM 14][93577]
|
||||
|
||||
\* Refer to Rust's [platform support page][platform-support-doc] for more
|
||||
information on Rust's tiered platform support.
|
||||
|
||||
Libraries
|
||||
---------
|
||||
- [Guarantee call order for `sort_by_cached_key`][89621]
|
||||
- [Improve `Duration::try_from_secs_f32`/`f64` accuracy by directly processing exponent and mantissa][90247]
|
||||
- [Make `Instant::{duration_since, elapsed, sub}` saturating][89926]
|
||||
- [Remove non-monotonic clocks workarounds in `Instant::now`][89926]
|
||||
- [Make `BuildHasherDefault`, `iter::Empty` and `future::Pending` covariant][92630]
|
||||
|
||||
Stabilized APIs
|
||||
---------------
|
||||
- [`Arc::new_cyclic`][arc_new_cyclic]
|
||||
- [`Rc::new_cyclic`][rc_new_cyclic]
|
||||
- [`slice::EscapeAscii`][slice_escape_ascii]
|
||||
- [`<[u8]>::escape_ascii`][slice_u8_escape_ascii]
|
||||
- [`u8::escape_ascii`][u8_escape_ascii]
|
||||
- [`Vec::spare_capacity_mut`][vec_spare_capacity_mut]
|
||||
- [`MaybeUninit::assume_init_drop`][assume_init_drop]
|
||||
- [`MaybeUninit::assume_init_read`][assume_init_read]
|
||||
- [`i8::abs_diff`][i8_abs_diff]
|
||||
- [`i16::abs_diff`][i16_abs_diff]
|
||||
- [`i32::abs_diff`][i32_abs_diff]
|
||||
- [`i64::abs_diff`][i64_abs_diff]
|
||||
- [`i128::abs_diff`][i128_abs_diff]
|
||||
- [`isize::abs_diff`][isize_abs_diff]
|
||||
- [`u8::abs_diff`][u8_abs_diff]
|
||||
- [`u16::abs_diff`][u16_abs_diff]
|
||||
- [`u32::abs_diff`][u32_abs_diff]
|
||||
- [`u64::abs_diff`][u64_abs_diff]
|
||||
- [`u128::abs_diff`][u128_abs_diff]
|
||||
- [`usize::abs_diff`][usize_abs_diff]
|
||||
- [`Display for io::ErrorKind`][display_error_kind]
|
||||
- [`From<u8> for ExitCode`][from_u8_exit_code]
|
||||
- [`Not for !` (the "never" type)][not_never]
|
||||
- [_Op_`Assign<$t> for Wrapping<$t>`][wrapping_assign_ops]
|
||||
- [`arch::is_aarch64_feature_detected!`][is_aarch64_feature_detected]
|
||||
|
||||
Cargo
|
||||
-----
|
||||
- [Port cargo from `toml-rs` to `toml_edit`][cargo/10086]
|
||||
- [Stabilize `-Ztimings` as `--timings`][cargo/10245]
|
||||
- [Stabilize namespaced and weak dependency features.][cargo/10269]
|
||||
- [Accept more `cargo:rustc-link-arg-*` types from build script output.][cargo/10274]
|
||||
- [cargo-new should not add ignore rule on Cargo.lock inside subdirs][cargo/10379]
|
||||
|
||||
Misc
|
||||
----
|
||||
- [Ship docs on Tier 2 platforms by reusing the closest Tier 1 platform docs][92800]
|
||||
- [Drop rustc-docs from complete profile][93742]
|
||||
- [bootstrap: tidy up flag handling for llvm build][93918]
|
||||
|
||||
Compatibility Notes
|
||||
-------------------
|
||||
- [Remove compiler-rt linking hack on Android][83822]
|
||||
- [Mitigations for platforms with non-monotonic clocks have been removed from
|
||||
`Instant::now`][89926]. On platforms that don't provide monotonic clocks, an
|
||||
instant is not guaranteed to be greater than an earlier instant anymore.
|
||||
- [`Instant::{duration_since, elapsed, sub}` do not panic anymore on underflow,
|
||||
saturating to `0` instead][89926]. In the real world the panic happened mostly
|
||||
on platforms with buggy monotonic clock implementations rather than catching
|
||||
programming errors like reversing the start and end times. Such programming
|
||||
errors will now results in `0` rather than a panic.
|
||||
- In a future release we're planning to increase the baseline requirements for
|
||||
the Linux kernel to version 3.2, and for glibc to version 2.17. We'd love
|
||||
your feedback in [PR #95026][95026].
|
||||
|
||||
Internal Changes
|
||||
----------------
|
||||
|
||||
These changes provide no direct user facing benefits, but represent significant
|
||||
improvements to the internals and overall performance of rustc
|
||||
and related tools.
|
||||
|
||||
- [Switch all libraries to the 2021 edition][92068]
|
||||
|
||||
[83822]: https://github.com/rust-lang/rust/pull/83822
|
||||
[86374]: https://github.com/rust-lang/rust/pull/86374
|
||||
[87487]: https://github.com/rust-lang/rust/pull/87487
|
||||
[89621]: https://github.com/rust-lang/rust/pull/89621
|
||||
[89926]: https://github.com/rust-lang/rust/pull/89926
|
||||
[90132]: https://github.com/rust-lang/rust/pull/90132
|
||||
[90247]: https://github.com/rust-lang/rust/pull/90247
|
||||
[91606]: https://github.com/rust-lang/rust/pull/91606
|
||||
[92068]: https://github.com/rust-lang/rust/pull/92068
|
||||
[92300]: https://github.com/rust-lang/rust/pull/92300
|
||||
[92357]: https://github.com/rust-lang/rust/pull/92357
|
||||
[92383]: https://github.com/rust-lang/rust/pull/92383
|
||||
[92630]: https://github.com/rust-lang/rust/pull/92630
|
||||
[92670]: https://github.com/rust-lang/rust/pull/92670
|
||||
[92800]: https://github.com/rust-lang/rust/pull/92800
|
||||
[92933]: https://github.com/rust-lang/rust/pull/92933
|
||||
[93566]: https://github.com/rust-lang/rust/pull/93566
|
||||
[93577]: https://github.com/rust-lang/rust/pull/93577
|
||||
[93658]: https://github.com/rust-lang/rust/pull/93658
|
||||
[93742]: https://github.com/rust-lang/rust/pull/93742
|
||||
[93824]: https://github.com/rust-lang/rust/pull/93824
|
||||
[93918]: https://github.com/rust-lang/rust/pull/93918
|
||||
[95026]: https://github.com/rust-lang/rust/pull/95026
|
||||
|
||||
[cargo/10086]: https://github.com/rust-lang/cargo/pull/10086
|
||||
[cargo/10245]: https://github.com/rust-lang/cargo/pull/10245
|
||||
[cargo/10269]: https://github.com/rust-lang/cargo/pull/10269
|
||||
[cargo/10274]: https://github.com/rust-lang/cargo/pull/10274
|
||||
[cargo/10379]: https://github.com/rust-lang/cargo/pull/10379
|
||||
|
||||
[arc_new_cyclic]: https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.new_cyclic
|
||||
[rc_new_cyclic]: https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#method.new_cyclic
|
||||
[slice_escape_ascii]: https://doc.rust-lang.org/stable/std/slice/struct.EscapeAscii.html
|
||||
[slice_u8_escape_ascii]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.escape_ascii
|
||||
[u8_escape_ascii]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.escape_ascii
|
||||
[vec_spare_capacity_mut]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.spare_capacity_mut
|
||||
[assume_init_drop]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_drop
|
||||
[assume_init_read]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_read
|
||||
[i8_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.abs_diff
|
||||
[i16_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i16.html#method.abs_diff
|
||||
[i32_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i32.html#method.abs_diff
|
||||
[i64_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i64.html#method.abs_diff
|
||||
[i128_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i128.html#method.abs_diff
|
||||
[isize_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.isize.html#method.abs_diff
|
||||
[u8_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.abs_diff
|
||||
[u16_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u16.html#method.abs_diff
|
||||
[u32_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u32.html#method.abs_diff
|
||||
[u64_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u64.html#method.abs_diff
|
||||
[u128_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u128.html#method.abs_diff
|
||||
[usize_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.usize.html#method.abs_diff
|
||||
[display_error_kind]: https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#impl-Display
|
||||
[from_u8_exit_code]: https://doc.rust-lang.org/stable/std/process/struct.ExitCode.html#impl-From%3Cu8%3E
|
||||
[not_never]: https://doc.rust-lang.org/stable/std/primitive.never.html#impl-Not
|
||||
[wrapping_assign_ops]: https://doc.rust-lang.org/stable/std/num/struct.Wrapping.html#trait-implementations
|
||||
[is_aarch64_feature_detected]: https://doc.rust-lang.org/stable/std/arch/macro.is_aarch64_feature_detected.html
|
||||
|
||||
Version 1.59.0 (2022-02-24)
|
||||
==========================
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
beta
|
||||
stable
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue