Announcing Rust 1.96

Rust’s new update fixes an old annoyance, but fans are already arguing about the cleanup plan

TLDR: Rust 1.96 adds new tools and finally tackles a long-standing annoyance with how number ranges work, which matters because these tiny building blocks show up everywhere in code. Fans are thrilled the fix happened at all, but some are already roasting the confusing “legacy” naming plan.

Rust, a programming language loved by people who care a lot about safety and performance, just dropped version 1.96 — and the biggest soap-opera moment is a long-awaited fix for one of the community’s oldest gripes: ranges, the little start-to-end shortcuts people use all the time. For years, some users treated this as an awkward flaw that would never be cleaned up. So when the update finally arrived, one reaction basically summed up the mood: shocked relief. As one commenter put it, they expected the problem to stay an “eternal wart” forever, and now everyone’s nervously asking the same question: how painful will the transition be?

But this is the Rust community, so of course the celebration instantly turned into a naming fight. The plan is to bring in new range types now and move the old ones into a “legacy” corner later, which triggered instant side-eye. One commenter mocked the whole idea by joking about future folders named something like “legacy::legacier,” turning a serious design complaint into the thread’s snarkiest line. Translation for non-coders: people are happy the mess is being fixed, but not everyone agrees the cleanup labels make sense.

There was also one pure victory-lap moment: assert_matches!, a small new tool for checking whether a value looks the way you expect, got a simple ecstatic response: “After all these years!” So yes, Rust shipped useful improvements — but the real entertainment was the crowd swinging between applause, anxiety, and extremely nerdy rename drama.

Key Points

  • Rust 1.96.0 has been released on the stable channel and can be installed or updated using `rustup`.
  • Rust 1.96.0 stabilizes new `core::range` types, including `Range`, `RangeFrom`, and `RangeInclusive`, based on RFC3550.
  • The new range types implement `IntoIterator` instead of `Iterator`, allowing them to implement `Copy`.
  • A future Rust version will continue the range transition with re-exports such as `RangeFull` and `RangeTo`, while current syntax like `0..1` still yields legacy types for now.
  • Rust 1.96.0 also stabilizes `assert_matches!` and `debug_assert_matches!`, which provide improved diagnostics when pattern assertions fail.

Hottest takes

"eternal wart" — Tuna-Fish
"After all these years!" — PoignardAzur
"std::range::legacy::legacier" — j1elo
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.