
Rust 1.97 の新機能 - v0シンボルマングリングのデフォルト化とCargoの警告制御
所有権と型を体系立てて学べる定番書。
手を動かして基礎から積み上げる入門書。
仕組みを深掘りしたい中級者向けの一冊。
当サイトは Amazon.co.jp を宣伝しリンクすることで紹介料を得る手段を提供する、Amazonアソシエイト・プログラムの参加者です。価格・在庫はリンク先の最新情報をご確認ください。
システムプログラミング言語 Rust の新しい安定版 Rust 1.97.0 が、2026年7月9日にリリースされました。今回の目玉は、コンパイラが生成するシンボル名の付け方(マングリング)が v0 スキームでデフォルト化されたことと、Cargo の警告制御が安定版に入ったことです。この記事では、言語・標準ライブラリ・Cargo の変更点を Rust 公式ブログと RELEASES.md を一次ソースに整理します。
NOTE
本記事のバージョン番号・リリース日・機能は、Rust 公式ブログおよび RELEASES.md(releases.rs)で2026年7月時点に確認した内容です。標準ライブラリのメソッドの挙動は公式の std ドキュメントで確認しています。一次ソースで確定できない細部については、その旨を明示します。
概要: まず結論
- バージョン: Rust 1.97.0(2026年7月9日リリース)
- コンパイラ: シンボルマングリングが v0 スキームでデフォルトに。リンカのメッセージが既定で警告として表示されるように
- 標準ライブラリ: 整数のビット操作メソッド群が安定化、
char::is_controlが const 化 - Cargo:
build.warningsとresolver.lockfile-pathの設定が安定化、--manifest-pathに短縮形-mが追加
アップデートは rustup update stable で行えます(後述)。Rust そのものが初めての方は、先にRust と rustup の始め方を読むと本記事の内容も追いやすくなります。
言語・コンパイラの変更
v0シンボルマングリングがデフォルトに
今回の最大の変更は、コンパイラが吐き出すシンボル名のマングリング方式が v0 スキームでデフォルトになったことです。マングリングとは、関数やジェネリック型などの名前を、リンカやデバッガが扱える一意の文字列へ符号化する仕組みです。
従来の(レガシーな)方式にはいくつかの弱点があり、たとえばジェネリックパラメータの値が保持されない、名前の一意性に不整合が出るといった問題がありました。Rust 独自に設計された v0 スキームはこれらを解消し、シンボル名がより正確で衝突しにくくなります。
レガシー方式は今後 nightly ビルドに限定され、将来的な削除が予定されています。JS ツールチェーンや型システムが各所でネイティブ実装・再設計へ進む流れ(Oxc / Oxlint、Bun の Zig から Rust への書き換え)と同じく、Rust 自身も足回りを整理し続けています。
リンカメッセージの可視化
これまでコンパイルが成功するとリンカのメッセージは握りつぶされていましたが、Rust 1.97 からは既定で警告として表示されるようになりました。これらは linker_messages という lint 経由で報告され、通常の警告とは別に個別に設定できます。
その他の言語変更
- must-use lint の判定で、
Result<T, Uninhabited>とControlFlow<Uninhabited, T>をTと等価に扱うようになりました - allow-by-default の
dead_code_pub_in_binarylint が追加されました(バイナリクレート内の未使用なpub項目を検出) - ターゲット機能
div32/lam-bh/lamcas/ld-seq-sa/scqが安定化 cfg(target_has_atomic_primitive_alignment)が安定化use文の末尾に置くselfが、より多くのケースで許可されるように
標準ライブラリ・安定化API
整数のビット操作メソッド
標準ライブラリでは、整数型に対するビット操作メソッドがまとまって安定化されました。符号なし・符号付き整数と NonZero<{integer}> の双方で使えます。挙動は公式の std ドキュメントに基づき、次のとおりです。
| メソッド | 戻り値 | 挙動 |
|---|---|---|
isolate_highest_one | 整数 | 最上位の 1 のビットだけを立てた値を返す(0 なら 0) |
isolate_lowest_one | 整数 | 最下位の 1 のビットだけを立てた値を返す(0 なら 0) |
highest_one | Option | 最上位の 1 のビット位置を返す(0 なら None) |
lowest_one | Option | 最下位の 1 のビット位置を返す(0 なら None) |
bit_width | 整数 | 値の表現に必要な最小ビット数を返す(0 なら 0) |
実際の使用例です。
fn main() {
let n: u32 = 0b0110_0100;
// 最上位・最下位の 1 のビットだけを取り出す
assert_eq!(n.isolate_highest_one(), 0b0100_0000);
assert_eq!(n.isolate_lowest_one(), 0b0000_0100);
// 1 のビットの位置(インデックス)を Option で得る
assert_eq!(n.highest_one(), Some(6));
assert_eq!(n.lowest_one(), Some(2));
assert_eq!(0_u32.highest_one(), None);
// 値を表現するのに必要な最小ビット数
assert_eq!(0b111_u32.bit_width(), 3);
assert_eq!(u32::MAX.bit_width(), 32);
assert_eq!(0_u32.bit_width(), 0);
}これまで leading_zeros や trailing_zeros から計算していた処理を、意図の伝わる名前のメソッドで直接書けるようになります。
その他のトレイト実装・const化
Default for RepeatNが実装されましたCopy for ffi::FromBytesUntilNulErrorが実装されました- UEFI ターゲットで
Send for std::fs::Fileが実装されました char::is_controlが const 安定化され、const文脈で呼べるようになりました
Cargo・ツールの変更
Cargo にも実務で効く変更が入りました。
| 変更 | 内容 |
|---|---|
build.warnings の安定化 | ローカルパッケージの lint 警告の扱いを allow / warn / deny で制御。CI で警告ゼロを強制する用途に便利で、キャッシュを無効化しない |
resolver.lockfile-path の安定化 | 依存解決に使うロックファイルのパスを指定できる。読み取り専用のソースディレクトリで作業する場合に有用 |
-m ショートハンド | --manifest-path の短縮形として -m が追加 |
cargo clean の安全化 | --target-dir がターゲットディレクトリらしくない場合にエラーを出す |
| 依存の削減 | crates-io クレートから curl 依存を除去 |
とくに build.warnings は、これまで CI で RUSTFLAGS="-Dwarnings" を渡していた運用を置き換えられます。設定ファイルに書けるうえ、ビルドキャッシュを無効化しないのが利点です。環境変数 CARGO_BUILD_WARNINGS でも指定できます。
[build]
warnings = "deny"rustdoc 側でも --emit フラグと --remap-path-prefix が安定化されています。
非互換・注意点
WARNING
v0 シンボルマングリングのデフォルト化により、古いバージョンのデバッガやプロファイラが Rust の吐くシンボルをうまくデマングル(元の名前に復元)できない場合があります。gdb / lldb / perf などを使っている場合は、ツール側を新しめのバージョンへ更新しておくと安全です。
レガシーマングリングは nightly でのみ利用可能になり、将来的に削除される見込みです。恒久的にレガシー方式へ固定する運用は避け、v0 前提へ移行しておくのが無難です。
アップデート方法
rustup を使っていれば、次のコマンドで安定版チャンネルを 1.97.0 へ更新できます。
rustup update stable
rustc --versionrustup 自体をまだ導入していない場合や、ツールチェーン管理の基本を確認したい場合はRust と rustup の始め方を参照してください。ネイティブ実装への移行という点では、TypeScript のネイティブコンパイラ(Corsa)の動きとも通じるものがあります。
まとめ
Rust 1.97.0 は、派手な新構文こそ少ないものの、コンパイラとツールの足回りを整える実務寄りのリリースです。
- v0 シンボルマングリングのデフォルト化で、シンボル名がより正確に。古いデバッガ/プロファイラは更新推奨
- Cargo の
build.warnings安定化で、CI の警告ゼロ強制がキャッシュを壊さずに書けるように - 整数のビット操作APIと
char::is_controlの const 化で、標準ライブラリの表現力が向上
rustup update stable で更新し、まずは CI の警告制御と新しいビット操作メソッドから取り入れてみてください。


