概要
Rust 1.96.0が2026年5月28日に正式リリースされた。今回のリリースでは、RFC 3550に基づくコピー可能なRange型の安定化が目玉となっており、これまでの制約を解消する設計上の改善が加えられている。またassert_matches!マクロの標準化、WebAssemblyターゲットにおける安全性強化、そしてCargoのセキュリティ脆弱性2件の修正も含まれている。更新はrustup update stableで行える。
コピー可能なRange型の導入
最大の新機能は、RFC 3550に基づく新しいRange型群の安定化だ。従来のstd::ops::RangeなどのRange型はIteratorトレイトを直接実装していたため、Copyトレイトを実装できないという制約があった。新しく導入されたcore::range::Range、core::range::RangeFrom、core::range::RangeInclusiveは「IntoIteratorを実装する」設計に変更されており、この制限が解消された。
これにより、スライスアクセッサをコピー可能な型のフィールドに保存するといったユースケースが可能になる。なお、新しいRangeInclusiveはフィールドが公開されており、従来版とは構造が異なる点に注意が必要だ。現状、0..1のようなRange構文は依然として従来型を生成するが、将来のエディションで新型を生成するよう変更される予定とされている。
assert_matches!マクロの安定化と他の変更
assert_matches!およびdebug_assert_matches!マクロが標準ライブラリに安定化された。これらはパターンマッチによるアサーションを提供するもので、サードパーティクレートとの名前衝突を避けるため標準プリュードには含まれておらず、使用時は明示的なインポートが必要となる。安定化されたAPIには他にも、AssertUnwindSafe、LazyCell、LazyLock向けのFrom<T>実装3種が含まれる。
WebAssemblyターゲットにおいては、リンカーの--allow-undefinedフラグのデフォルト使用が廃止され、未定義シンボルがあるとリンクエラーになるよう変更された。これによりビルド時に潜在的なバグを早期に検出できる。既存のビルドで問題が生じる場合は、RUSTFLAGS=-Clink-arg=--allow-undefinedで従来の動作を維持できる。
セキュリティ修正
今回のリリースにはCargoに関するセキュリティ脆弱性2件の修正も含まれている。CVE-2026-5223(中程度)はシンボリックリンクを含むtarボール展開時の問題で、CVE-2026-5222(低程度)はURL正規化における認証情報の取り扱いに関する問題だ。いずれもサードパーティのクレートレジストリを利用している場合に影響する可能性があるが、crates.ioのユーザーには影響しないとされている。