By using this site, you agree to the Privacy Policy and Terms of Use.
Accept
World of SoftwareWorld of SoftwareWorld of Software
  • News
  • Software
  • Mobile
  • Computing
  • Gaming
  • Videos
  • More
    • Gadget
    • Web Stories
    • Trending
    • Press Release
Search
  • Privacy
  • Terms
  • Advertise
  • Contact
Copyright © All Rights Reserved. World of Software.
Reading: Rust 1.80.0: Exclusive Ranges in Patterns, Stabilized APIs, and More | HackerNoon
Share
Sign In
Notification Show More
Font ResizerAa
World of SoftwareWorld of Software
Font ResizerAa
  • Software
  • Mobile
  • Computing
  • Gadget
  • Gaming
  • Videos
Search
  • News
  • Software
  • Mobile
  • Computing
  • Gaming
  • Videos
  • More
    • Gadget
    • Web Stories
    • Trending
    • Press Release
Have an existing account? Sign In
Follow US
  • Privacy
  • Terms
  • Advertise
  • Contact
Copyright © All Rights Reserved. World of Software.
World of Software > Computing > Rust 1.80.0: Exclusive Ranges in Patterns, Stabilized APIs, and More | HackerNoon
Computing

Rust 1.80.0: Exclusive Ranges in Patterns, Stabilized APIs, and More | HackerNoon

News Room
Last updated: 2025/09/28 at 2:15 PM
News Room Published 28 September 2025
Share
SHARE

The Rust team is happy to announce a new version of Rust, 1.80.0. Rust is a programming language empowering everyone to build reliable and efficient software.

If you have a previous version of Rust installed via rustup, you can get 1.80.0 with:

$ rustup update stable

If you don’t have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes for 1.80.0.

If you’d like to help us out by testing future releases, you might consider updating locally to use the beta channel (rustup default beta) or the nightly channel (rustup default nightly). Please report any bugs you might come across!

What’s in 1.80.0 stable

LazyCell and LazyLock

These “lazy” types delay the initialization of their data until first access. They are similar to the OnceCell and OnceLock types stabilized in 1.70, but with the initialization function included in the cell. This completes the stabilization of functionality adopted into the standard library from the popular lazy_static and once_cell crates.

LazyLock is the thread-safe option, making it suitable for places like static values. For example, both the spawn thread and the main scope will see the exact same duration below, since LAZY_TIME will be initialized once, by whichever ends up accessing the static first. Neither use has to know how to initialize it, unlike they would with OnceLock::get_or_init().

use std::sync::LazyLock;
use std::time::Instant;

static LAZY_TIME: LazyLock<Instant> = LazyLock::new(Instant::now);

fn main() {
    let start = Instant::now();
    std::thread::scope(|s| {
        s.spawn(|| {
            println!("Thread lazy time is {:?}", LAZY_TIME.duration_since(start));
        });
        println!("Main lazy time is {:?}", LAZY_TIME.duration_since(start));
    });
}

LazyCell does the same thing without thread synchronization, so it doesn’t implement Sync, which is needed for static, but it can still be used in thread_local! statics (with distinct initialization per thread). Either type can also be used in other data structures as well, depending on thread-safety needs, so lazy initialization is available everywhere!

Checked cfg names and values

In 1.79, rustc stabilized a --check-cfg flag, and now Cargo 1.80 is enabling those 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.

Unexpected cfgs are reported by the warn-by-default unexpected_cfgs lint, which is meant to catch typos or other misconfiguration. For example, in a project with an optional rayon dependency, this code is configured for the wrong feature value:

fn main() {
    println!("Hello, world!");

    #[cfg(feature = "crayon")]
    rayon::join(
        || println!("Hello, Thing One!"),
        || println!("Hello, Thing Two!"),
    );
}


warning: unexpected `cfg` condition value: `crayon`
 --> src/main.rs:4:11
  |
4 |     #[cfg(feature = "crayon")]
  |           ^^^^^^^^^^--------
  |                     |
  |                     help: there is a expected value with a similar name: `"rayon"`
  |
  = note: expected values for `feature` are: `rayon`
  = help: consider adding `crayon` as a feature in `Cargo.toml`
  = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
  = note: `#[warn(unexpected_cfgs)]` on by default

The same warning is reported regardless of whether the actual rayon feature is enabled or not.

The [lints] table in the Cargo.toml manifest can also be used to extend the list of known names and values for custom cfg. rustc automatically provides the syntax to use in the warning.

[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(foo, values("bar"))'] }

You can read more about this feature in a previous blog post announcing the availability of the feature on nightly.

Exclusive ranges in patterns

Rust ranged patterns can now use exclusive endpoints, written a..b or ..b similar to the Range and RangeTo expression types. For example, the following patterns can now use the same constants for the end of one pattern and the start of the next:

pub fn size_prefix(n: u32) -> &'static str {
    const K: u32 = 10u32.pow(3);
    const M: u32 = 10u32.pow(6);
    const G: u32 = 10u32.pow(9);
    match n {
        ..K => "",
        K..M => "k",
        M..G => "M",
        G.. => "G",
    }
}

Previously, only inclusive (a..=b or ..=b) or open (a..) ranges were allowed in patterns, so code like this would require separate constants for inclusive endpoints like K - 1.

Exclusive ranges have been implemented as an unstable feature for a long time, but the blocking concern was that they might add confusion and increase the chance of off-by-one errors in patterns. To that end, 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 you might want to switch exclusive patterns to inclusive, or vice versa.

Stabilized APIs

  • impl Default for Rc<CStr>
  • impl Default for Rc<str>
  • impl Default for Rc<[T]>
  • impl Default for Arc<str>
  • impl Default for Arc<CStr>
  • impl Default for Arc<[T]>
  • impl IntoIterator for Box<[T]>
  • impl FromIterator<String> for Box<str>
  • impl FromIterator<char> for Box<str>
  • LazyCell
  • LazyLock
  • Duration::div_duration_f32
  • Duration::div_duration_f64
  • Option::take_if
  • Seek::seek_relative
  • BinaryHeap::as_slice
  • NonNull::offset
  • NonNull::byte_offset
  • NonNull::add
  • NonNull::byte_add
  • NonNull::sub
  • NonNull::byte_sub
  • NonNull::offset_from
  • NonNull::byte_offset_from
  • NonNull::read
  • NonNull::read_volatile
  • NonNull::read_unaligned
  • NonNull::write
  • NonNull::write_volatile
  • NonNull::write_unaligned
  • NonNull::write_bytes
  • NonNull::copy_to
  • NonNull::copy_to_nonoverlapping
  • NonNull::copy_from
  • NonNull::copy_from_nonoverlapping
  • NonNull::replace
  • NonNull::swap
  • NonNull::drop_in_place
  • NonNull::align_offset
  • <[T]>::split_at_checked
  • <[T]>::split_at_mut_checked
  • str::split_at_checked
  • str::split_at_mut_checked
  • str::trim_ascii
  • str::trim_ascii_start
  • str::trim_ascii_end
  • <[u8]>::trim_ascii
  • <[u8]>::trim_ascii_start
  • <[u8]>::trim_ascii_end
  • Ipv4Addr::BITS
  • Ipv4Addr::to_bits
  • Ipv4Addr::from_bits
  • Ipv6Addr::BITS
  • Ipv6Addr::to_bits
  • Ipv6Addr::from_bits
  • Vec::<[T; N]>::into_flattened
  • <[[T; N]]>::as_flattened
  • <[[T; N]]>::as_flattened_mut

These APIs are now stable in const contexts:

  • <[T]>::last_chunk
  • BinaryHeap::new

Other changes

Check out everything that changed in Rust, Cargo, and Clippy.

Contributors to 1.80.0

Many people came together to create Rust 1.80.0. We couldn’t have done it without all of you. Thanks!


The Rust Release Team

Also published here

Photo by Lay Naik on Unsplash

Sign Up For Daily Newsletter

Be keep up! Get the latest breaking news delivered straight to your inbox.
By signing up, you agree to our Terms of Use and acknowledge the data practices in our Privacy Policy. You may unsubscribe at any time.
Share This Article
Facebook Twitter Email Print
Share
What do you think?
Love0
Sad0
Happy0
Sleepy0
Angry0
Dead0
Wink0
Previous Article Jaguars vs. 49ers Livestream: How to Watch NFL Week 4 Online Today
Next Article This free open-source tool is my new favorite way to capture notes
Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Stay Connected

248.1k Like
69.1k Follow
134k Pin
54.3k Follow

Latest News

‘To them, ageing is a technical problem that can, and will, be fixed’: how the rich and powerful plan to live for ever
News
How to Use LinkedIn for Beginners
Computing
Stop Renting Microsoft Office — Own the 2024 Suite for a One-Time Fee
News
Anytype vs. Notion: Which Is Better for Productivity in 2025?
Computing

You Might also Like

Computing

How to Use LinkedIn for Beginners

11 Min Read
Computing

Anytype vs. Notion: Which Is Better for Productivity in 2025?

27 Min Read
Computing

You Should Be Faking Your Security Answers | HackerNoon

2 Min Read
Computing

Huawei EV sales drop as demand for BYD, Geely, Leapmotor soar · TechNode

4 Min Read
//

World of Software is your one-stop website for the latest tech news and updates, follow us now to get the news that matters to you.

Quick Link

  • Privacy Policy
  • Terms of use
  • Advertise
  • Contact

Topics

  • Computing
  • Software
  • Press Release
  • Trending

Sign Up for Our Newsletter

Subscribe to our newsletter to get our newest articles instantly!

World of SoftwareWorld of Software
Follow US
Copyright © All Rights Reserved. World of Software.
Welcome Back!

Sign in to your account

Lost your password?