Email me

Rust versions / 1.81

Rust release · Sep 5, 2024

Rust 1.81: what's new, what was stabilized

Short answerRust 1.81 was released on Sep 5, 2024: 1 language stabilization ([Stabilize #[expect] for lints (RFC 2383),](https://github.com/rust-lang/rust/pull/120924/...); 16 newly stable APIs (core::error, hint::assert_unchecked, fs::exists, AtomicBool::fetch_not, ...); 4 compatibility notes that can affect existing code.

Sep 5, 2024release date
1language stabilizations
16APIs stabilized
-new edition

← Rust 1.80All versionsRust 1.82 →

Language features stabilized

  • [Stabilize #[expect] for lints (RFC 2383),](https://github.com/rust-lang/rust/pull/120924/) like #[allow] with a warning if the lint is _not_ fulfilled.

16 APIs stabilized

core::error, hint::assert_unchecked, fs::exists, AtomicBool::fetch_not, Duration::abs_diff, IoSlice::advance, IoSlice::advance_slices, IoSliceMut::advance, IoSliceMut::advance_slices, PanicHookInfo, PanicInfo::message, PanicMessage, char::from_u32_unchecked, char::from_u32_unchecked, CStr::count_bytes, CStr::from_ptr

Can it break my build?

The release lists these compatibility notes. Most only affect rare code, but read them before you raise your toolchain in CI:

  • Usage of the wasm32-wasi target will now issue a compiler warning and request users switch to the wasm32-wasip1 target instead. Both targets are the same, wasm32-wasi is only being renamed, and this change to the WASI target is being done to enable removing wasm32-wasi in January 2025.
  • We have renamed std::panic::PanicInfo to std::panic::PanicHookInfo. The old name will continue to work as an alias, but will result in a deprecation warning starting in Rust 1.82.0.
  • The new sort implementations may panic if a type's implementation of Ord (or the given comparison function) does not implement a total order as the trait requires. Ord's supertraits (PartialOrd, Eq, and PartialEq) must also be consistent. The previous implementations would not "notice" any problem, but the new implementations have a good chance of detecting inconsistencies, throwing a panic rather than returning knowingly unsorted data.
  • [In very rare cases, a change in the internal evaluation order of the trait

Use it

rustup update stable        # get the newest release
rustup install 1.81          # or exactly this one
rustup override set 1.81     # pin a project to it

To require at least this version from users of your crate, set rust-version = "1.81" under [package] in Cargo.toml. Cargo then refuses to build it on older compilers with a clear message, and with resolver 3 (the default on the 2024 edition, Rust 1.85+) it also prefers dependency versions that support it.

Full release notes

Language

<a id="1.81.0-Compiler"></a>

Compiler

<a id="1.81.0-Libraries"></a>

Libraries

<a id="1.81.0-Stabilized-APIs"></a>

Stabilized APIs

These APIs are now stable in const contexts:

<a id="1.81.0-Cargo"></a>

Cargo

<a id="1.81.0-Compatibility-Notes"></a>

Compatibility Notes

  • Usage of the wasm32-wasi target will now issue a compiler warning and request users switch to the wasm32-wasip1 target instead. Both targets are the same, wasm32-wasi is only being renamed, and this change to the WASI target is being done to enable removing wasm32-wasi in January 2025.
  • We have renamed std::panic::PanicInfo to std::panic::PanicHookInfo. The old name will continue to work as an alias, but will result in a deprecation warning starting in Rust 1.82.0.

core::panic::PanicInfo will remain unchanged, however, as this is now a *different type*.

The reason is that these types have different roles: std::panic::PanicHookInfo is the argument to the panic hook in std context (where panics can have an arbitrary payload), while core::panic::PanicInfo is the argument to the [#[panic_handler]](https://doc.rust-lang.org/nomicon/panic-handler.html) in no_std context (where panics always carry a formatted *message*). Separating these types allows us to add more useful methods to these types, such as std::panic::PanicHookInfo::payload_as_str() and core::panic::PanicInfo::message().

<a id="1.81.0-Internal-Changes"></a>

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.

Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.

← Rust 1.80All versionsRust 1.82 →

Up next

Next releaseRust 1.82Released Oct 17, 2024.Read it next →

Did this answer your question?

Get the receipts by email.

What my AI agents tried this week, with the real numbers: what worked, what flopped, what made money. One email when there is something worth reading.

No spam, never sold. Every email has a one-click unsubscribe.

Popular in the shop

All 124 tools →

Browse: Bundles and kitsHome, family and schoolMoney and businessAI toolsSports and fitnessMaking and hobbiesFood and drinkIndie dev and launchTrading and quant

Free: Landing page teardown iPhone app cost calculator LLM API cost calculator Paid online: $49 Launch Check App builds Articles FAQ