Rust 1.98.0 リリース — 数値最適化APIと低コストな整数整形を安定化
概要
Rust チームは 2026年8月20日に Rust 1.98.0 を公開しました。今回の安定版では、浮動小数点計算の最適化余地を明示する代数演算、バッファを再利用する整数整形、文字列・スライス・アトミック操作に関する複数の API が安定化されています。1
| 領域 | 主な追加・安定化 | 期待できる場面 |
|---|---|---|
| 浮動小数点 | algebraic_add などの代数演算 | 許容誤差を管理できる数値処理やベクトル化 |
| 文字列化 | <integer>::format_into と core::fmt::NumBuffer | 高頻度ログ、メトリクス、低割り当ての整形 |
| 文字列・slice | String::from_utf16le、str::strip_circumfix など | エンコーディング変換と文字列前後処理 |
| 並行処理 | Atomic<T> の関連API | 所有権を保ったバッファ操作の表現 |
| 安全性の契約 | ManuallyDrop と Box の説明更新 | unsafe コードの前提を明確化 |
代数演算APIは「高速化の指示」ではなく「意味の選択」
f32 と f64 に追加された algebraic_add、algebraic_sub、algebraic_mul、algebraic_div、algebraic_rem は、実数の代数的性質を利用できることをコンパイラに示すAPIです。通常の浮動小数点演算では丸め誤差により加算の結合則が成り立たないため、式の評価順を変えることはできません。代数演算では、最適化の一環としてコンパイラが並べ替えやベクトル化を行える余地が生まれます。1
ただし、Rust チームは最適化の具体的な内容を保証せず、結果が非決定的になり得ると説明しています。1 これは API の欠点ではなく、性能と数値再現性のトレードオフをコード上で選択可能にした設計です。
| 適用を検討しやすい処理 | 慎重に扱うべき処理 |
|---|---|
| 画像・音声・機械学習の前処理 | 金融計算や会計処理 |
| シミュレーションの近似計算 | ビット単位の再現性が必要なテスト |
| 誤差許容範囲が明確な集計 | クロスプラットフォームで完全一致を求める結果 |
導入前には、許容誤差、入力分布、CPUアーキテクチャ、コンパイラの最適化レベルを固定したテストを用意します。特に、従来の演算との誤差上限をCIで検証することで、性能改善と品質要件の両立を判断できます。
format_into が解決する割り当ての問題
すべてのプリミティブ整数型に format_into が追加されました。このAPIは、値を10進数へ整形するのに十分な NumBuffer を呼び出し側から渡し、そこに借用された str を返します。1 公式発表によれば、バッファ付き write! で生じ得る動的ディスパッチの一部を回避し、整数整形のベンチマークで itoa に近い性能を目指せる設計です。1
use core::fmt::NumBuffer;
let mut buffer = NumBuffer::new();
let message_id = 42_u64;
let rendered = message_id.format_into(&mut buffer);
assert_eq!(rendered, "42");
このAPIは、ログや計測タグのように数値文字列を繰り返し生成するホットパスで特に検討しやすい機能です。ただし、アプリケーション全体の性能は I/O、ロック競合、メモリアロケータ、シリアライゼーションに左右されます。局所的なベンチマークだけでなく、実トラフィックに近い負荷で効果を確認することが重要です。
文字列・slice・Atomic APIの安定化
Rust 1.98.0 では UTF-16 のリトルエンディアン/ビッグエンディアン文字列を扱う String::from_utf16le、String::from_utf16be とそれぞれの lossy 版が安定化されました。また、str::substr_range、[T]::subslice_range、str::strip_circumfix、[T]::strip_circumfix などが含まれます。1
これらは大きな構文変更ではありませんが、境界判定やインデックス計算を手書きする場面を減らし、意図を明確にする効果があります。特にバイナリプロトコル、Windows由来のテキスト、独自フォーマットを処理するコードでは、追加APIを利用する前後で境界値テストを充実させると安全です。
更新の進め方
| 手順 | 確認内容 |
|---|---|
| 1. ツールチェーン更新 | rustup update stable で安定版へ更新する 1 |
| 2. 既存テストの実行 | ワークスペース全体のテスト、Clippy、fmt、ドキュメントテストを動かす |
| 3. unsafe境界の確認 | ManuallyDrop、所有権移動、FFIを含む箇所を重点レビューする |
| 4. 数値テストの追加 | 代数演算を使う箇所では誤差許容範囲と再現性要件を明示する |
| 5. 性能を測定 | format_into などの置換は実ワークロードでベンチマークする |
まとめ
Rust 1.98.0 は、性能に関わる選択肢を増やしながら、安全性と意図の明示を重視した更新です。代数演算は数値計算に、format_into は高頻度の整数整形に、それぞれ新しい検討材料を提供します。いずれも「新しいAPIだから使う」のではなく、数値要件・性能計測・保守性を揃えて採用することで価値を引き出せます。