1.71.0 #
- Released on: 13 July, 2023
- Branched from master on: 26 May, 2023
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
, makinglet _ =
patterns more consistent with respect to the borrow checker. - Add
--print deployment-target
flag for Apple targets. - Stabilize
extern "C-unwind"
and friends. The existingextern "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 foraarch64-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 toT: Clone
. - Remove unnecessary
T: Send
bound inError for mpsc::SendError<T>
andTrySendError<T>
. - Fix docs for
alloc::realloc
to matchLayout
requirements that the size must not exceedisize::MAX
. - Document
const {}
syntax forstd::thread_local
. This syntax was stabilized in Rust 1.59, but not previously mentioned in release notes.
Stabilized APIs #
CStr::is_empty
BuildHasher::hash_one
NonZeroI*::is_positive
NonZeroI*::is_negative
NonZeroI*::checked_neg
NonZeroI*::overflowing_neg
NonZeroI*::saturating_neg
NonZeroI*::wrapping_neg
Neg for NonZeroI*
Neg for &NonZeroI*
From<[T; N]> for (T...)
(array to N-tuple for N in 1..=12)From<(T...)> for [T; N]
(N-tuple to array for N in 1..=12)windows::io::AsHandle for Box<T>
windows::io::AsHandle for Rc<T>
windows::io::AsHandle for Arc<T>
windows::io::AsSocket for Box<T>
windows::io::AsSocket for Rc<T>
windows::io::AsSocket for Arc<T>
These APIs are now stable in const contexts:
<*const T>::read
<*const T>::read_unaligned
<*mut T>::read
<*mut T>::read_unaligned
ptr::read
ptr::read_unaligned
<[T]>::split_at
Cargo #
- Allow named debuginfo options in
Cargo.toml
. - Add
workspace_default_members
to the output ofcargo 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 constantTypeId
in a pattern will potentially be broken. Known cases have already been fixed – in particular, users of thelog
crate’skv_unstable
feature should update tolog 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 runrustc
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 andRUSTUP_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
andRUSTUP_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.