← Back to all releases

Rust 1.71.0

Released on July 13, 2023

What's Changed

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.

- Fix docs for alloc::realloc

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

---------------

- 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]%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:

- <*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 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.