v1.96
2026年5月範囲(Range)がコピー可能になり扱いやすくなったほか、パターン一致を検証するテスト用マクロが追加されました。
Range 型がコピー可能になった
これまで 0..10 のような範囲(Range)は「イテレータそのもの」だったため、一度 for で回すと使い切られてしまい、変数に入れて使い回すのが面倒でした。
1.96 では Range・RangeFrom・RangeInclusive が Copy になり、軽量にコピーして持ち回れるようになりました。スライスの一部を指す「範囲」を構造体のフィールドに保存したり、関数に渡して何度も使う、といった書き方が自然にできます。
// 範囲を変数に入れて使い回せる(コピーされる)
let span = 2..5;
let a = &[10, 20, 30, 40, 50][span]; // [30, 40, 50]
let b = &[1, 2, 3, 4, 5][span]; // span を再利用できるassert_matches! マクロの追加
テストで「値が特定のパターンに一致するか」を確認したいとき、これまでは assert!(matches!(x, ...)) と書く必要があり、失敗時のエラーメッセージも分かりにくいものでした。
1.96 で標準ライブラリに assert_matches! と debug_assert_matches! が追加され、パターン一致をそのまま検証できるようになりました。失敗時には実際の値が表示されるため、テストのデバッグが楽になります。
use std::assert_matches::assert_matches;
let result: Result<i32, String> = Ok(42);
// 「Ok(中身は任意)」であることを検証。失敗時は実際の値が出る
assert_matches!(result, Ok(_));WebAssembly の未定義シンボルがエラーに
WebAssembly 向けにビルドするとき、これまでは未定義のシンボルが黙って「インポート」に変換され、設定ミスや名前の間違いが実行時まで気づけませんでした。
1.96 では未定義シンボルをリンカエラーとして扱うようになり、問題をビルド時に早期発見できます。Wasm を使う場合の安全性が一段上がりました。