Rust 1.71.0
Released on July 13, 2023
What's Changed
- Evaluate place expression in
PlaceMention, - Add
--print deployment-targetflag for Apple targets. - Stabilize
extern "C-unwind"and friends. - Update the version of musl used on
*-linux-musltargets to 1.2.3, - Stabilize
debugger_visualizer - Enable flatten-format-args by default.
- Make
Selfrespect tuple constructor privacy. - Improve niche placement by trying two strategies and picking the better result.
- Use
apple-m1as the target CPU foraarch64-apple-darwin. - Add Tier 3 support for the
x86_64h-apple-darwintarget. - Promote
loongarch64-unknown-linux-gnuto Tier 2 with host tools.
- Rework handling of recursive panics.
- Loosen
From<&[T]> for Box<[T]>bound toT: Clone. - Remove unnecessary
T: Sendbound - Fix docs for
alloc::realloc - Document
const {}syntax forstd::thread_local. CStr::is_emptyBuildHasher::hash_oneNonZeroI*::is_positiveNonZeroI*::is_negativeNonZeroI*::checked_negNonZeroI*::overflowing_negNonZeroI*::saturating_negNonZeroI*::wrapping_negNeg for NonZeroI*Neg for &NonZeroI*From<[T; N]> for (T...))From<(T...)> for [T; N]%3E-for-%5BT;+1%5D)windows::io::AsHandle for Boxwindows::io::AsHandle for Rcwindows::io::AsHandle for Arcwindows::io::AsSocket for Boxwindows::io::AsSocket for Rcwindows::io::AsSocket for Arc<*const T>::read<*const T>::read_unaligned<*mut T>::read<*mut T>::read_unalignedptr::readptr::read_unaligned<[T]>::split_at
- Remove structural match from
TypeId. - Add a
sysrootcrate to represent the standard library crates. - Cargo optimizes its usage under
rustup. When - [When querying a package, Cargo tries only the original name, all hyphens, and all underscores to
- Cargo now disallows
RUSTUP_HOMEand
Full Changelog
Language
--------
- Stabilize raw-dylib, link_ordinal, import_name_type and -Cdlltool.
- Uplift clippy::{drop,forget}_{ref,copy} lints.
- Type inference is more conservative around constrained vars.
- Use fulfillment to check Drop impl compatibility
Compiler
--------
- Evaluate place expression in PlaceMention,
making let _ = patterns more consistent with respect to the borrow checker.
- Add --print deployment-target flag for Apple targets.
- Stabilize extern "C-unwind" and friends.
The existing extern "C" etc. may change behavior for cross-language unwinding in a future release.
- Update the version of musl used on *-linux-musl targets to 1.2.3,
enabling time64 on 32-bit systems.
- Stabilize debugger_visualizer
for embedding metadata like Microsoft's Natvis.
- Enable flatten-format-args by default.
- Make Self respect tuple constructor privacy.
- Improve niche placement by trying two strategies and picking the better result.
- Use apple-m1 as the target CPU for aarch64-apple-darwin.
- Add Tier 3 support for the x86_64h-apple-darwin target.
- Promote loongarch64-unknown-linux-gnu to Tier 2 with host tools.
Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.
Libraries
---------
- Rework handling of recursive panics.
Additional panics are allowed while unwinding, as long as they are caught before escaping
a Drop implementation, but panicking within a panic hook is now an immediate abort.
- Loosen From<&[T]> for Box<[T]> bound to T: Clone.
- Remove unnecessary T: Send bound
in Error for mpsc::SendError and TrySendError.
to match Layout requirements that the size must not exceed isize::MAX.
- Document const {} syntax for std::thread_local.
This syntax was stabilized in Rust 1.59, but not previously mentioned in release notes.
Stabilized APIs
---------------
(array to N-tuple for N in 1..=12)
- From<(T...)> for [T; N]%3E-for-%5BT;+1%5D)
(N-tuple to array for N in 1..=12)
- windows::io::AsHandle for Box
- windows::io::AsHandle for Rc
- windows::io::AsHandle for Arc
- windows::io::AsSocket for Box
- windows::io::AsSocket for Rc
- windows::io::AsSocket for Arc
These APIs are now stable in const contexts:
Cargo
-----
- Allow named debuginfo options in Cargo.toml.
- Add workspace_default_members to the output of cargo metadata.
- Automatically inherit workspace fields when running cargo new/cargo init.
Rustdoc
-------
- Add a new rustdoc::unescaped_backticks lint for broken inline code.
- Support strikethrough with single tildes. (~~old~~ vs. ~new~)
Misc
----
Compatibility Notes
-------------------
- Remove structural match from TypeId.
Code that uses a constant TypeId in a pattern will potentially be broken.
Known cases have already been fixed -- in particular, users of the log
crate's kv_unstable feature should update to log v0.4.18 or later.
- Add a sysroot crate to represent the standard library crates.
This does not affect stable users, but may require adjustment in tools that build their own standard library.
- Cargo optimizes its usage under rustup. When
Cargo detects it will run rustc pointing to a rustup proxy, it'll try bypassing the proxy and
use the underlying binary directly. There are assumptions around the interaction with rustup and
RUSTUP_TOOLCHAIN. However, it's not expected to affect normal users.
- When querying a package, Cargo tries only the original name, all hyphens, and all underscores to
handle misspellings. Previously, Cargo tried each
combination of hyphens and underscores, causing excessive requests to crates.io.
- Cargo now disallows RUSTUP_HOME and
RUSTUP_TOOLCHAIN in the [env] configuration
table. This is considered to be not a use case Cargo would like to support, since it will likely
cause problems or lead to confusion.
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.