9月6日、RustチームはRust 1.81.0をリリースした。
以下では、バージョン1.81.0で導入された主な変更点をまとめる。
core::error::Error
トレイトの安定化core
モジュール内でError
トレイトが安定化され、#![no_std]
環境でも利用できるようになった。これにより、ライブラリのターゲットが異なる環境であっても、同じエラートレイトを標準化して使用できるようになった。新しいソートアルゴリズムの導入
Rustの標準ライブラリにおけるソートアルゴリズムが更新され、実行時のパフォーマンスおよびコンパイル時間が向上した。さらに、Ord
トレイトの不適切な実装を検出し、エラーを発生させる機能が追加された。これにより、正しくない順序付けが行われた場合、無意味なデータを返す代わりにパニックを引き起こす。新しいリンティングレベル
#[expect(lint)]
の安定化
Rust 1.81.0では、新しいリンティングレベルexpect
が導入された。これにより、特定のリンティングが発生することを明示的に期待し、発生しない場合には警告が表示される。この機能は、コードのリファクタリング中に一時的にリンティングを抑制したい場合に便利である。リンティングレベルの変更理由を(コメントではなく)明示可能に
Rust 1.81.0では、リンティングレベルを変更する際に、その理由を明示できる機能が追加された。
たとえば、特定のコードが浮動小数点演算を含まない環境で動作する場合、#![deny(clippy::float_arithmetic)]を使用してその使用をリンティングできる。しかし、新しい開発者がこのリンティングに遭遇した際、その理由をコメントとして残す必要があった。Rust 1.81.0では、コンパイラメッセージ内で直接この理由を提供できるようになり、以下のようなエラーメッセージが表示される。
error: floating-point arithmetic detected
--> src/lib.rs:4:5
|
4 | a + b
| ^^^^^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_arithmetic
= note: no hardware float support
note: the lint level is defined here
--> src/lib.rs:1:9
|
1 | #![deny(clippy::float_arithmetic, reason = "no hardware float support")]
| ^^^^^^^^^^^^^^^^^^^^^^^^
Clippyの強化
Clippyに新しいリンティングルールが追加され、#[expect]
アトリビュートの使用を促進する。また、リンティングレベルを変更する際に、その理由を明記できるようになり、他の開発者がその意図を理解しやすくなった。互換性に関する注意点
std::panic::PanicInfo
の名称がstd::panic::PanicHookInfo
に変更され、Rust 1.82.0以降、この変更が強制される。これにより、std
とcore
のパニックハンドラーの役割が明確化された。WASIターゲットの名称変更
wasm32-wasi
ターゲットがwasm32-wasip1
に変更され、2025年1月にはwasm32-wasi
ターゲットが削除される予定である。CVE-2024-43402の修正
Windows上でのバッチファイル実行時に、std::process::Command
が引数のエスケープ処理を正しく行わない問題が修正された。
1.81.0の導入方法
Rust 1.81.0をインストールするには、既にRustをインストールしている場合、以下のコマンドを実行することでアップデートが可能だ。
$ rustup update stable
まだRustをインストールしていない場合は、公式サイトからrustup
をインストールし、詳細なリリースノートを参照することができる。
詳細はAnnouncing Rust 1.81.0を参照していただきたい。