Rust 1.80, the latest version of the popular memory-safe programming language, has been released, featuring “lazy” types to delay initialization of data until their first access.
Rust 1.80 was unveiled on July 25. Developers with a previous version of Rust installed via rustup
can update to version 1.80 by running $ rustup update stable
.
The new lazy types LazyCell
and LazyLock
, which delay initialization of values until first access, are similar to the OnceCell
and OnceLock
types stabilized in Rust 1.70, but with the initialization function included in the cell. This completes the stabilization of functionality adopted into the standard library from lazy_static
and once_cell
crates. LazyLock
is the thread-safe option, suitable for places like static
values. LazyCell
lacks thread synchronization, so does not implement Sync
, which is needed for static
, but can still be used in thread_local!
statics, the Rust team said.
Also in Rust 1.80, ranged patterns now can use exclusive endpoints, written a..b
or ..b
similar to the Range
and RangeTo
expression types. Exclusive ranges had been implemented as an unstable feature in Rust. The blocking concern was that they might add confusion and increase the chance of off-by-one errors in patterns, the Rust team said. With Rust 1.80, exhaustiveness checking has been enhanced to better detect gaps in pattern matching, and new lints non_contiguous_range_endpoints
and overlapping_range_endpoints
will help detect cases where developers might want to switch exclusive patterns to inclusive, or vice versa.
In Rust 1.79 rustc
stabilized a --check-cfg
flag. Now Cargo 1.80 is enabling these checks for all cfg
names and values that it knows (in addition to the well known names and values from rustc
). This includes feature names from Cargo.toml
as well as new cargo::rustc-check-cfg
output from build scripts.
Rust 1.80 also stabilizes numerous APIs.