ニュース

Rust 1.97.0: v0シンボルマングリングが安定化、Cargoに警告制御が追加

Rust 1.97.0では、v0シンボルマングリングがデフォルトで有効になり、Cargoレベルでの警告拒否が可能になり、リンカー出力がデフォルトで非表示にならなくなった。

August 5, 2026· 1 min read
Rust 1.97.0: v0シンボルマングリングが安定化、Cargoに警告制御が追加

Rust 1.97.0は2026年7月9日にリリースされ、言語自体よりもビルドパイプラインに影響を与えるリリースだ。目立つ変更は3つある:v0シンボルマングリングがデフォルトになり、Cargoがビルドキャッシュに触れずに警告を制御でき、リンカー出力がデフォルトで抑制されなくなった。

v0シンボルマングリング:デフォルトへ

シンボルマングリングは、Rustがオブジェクトファイル内の関数や静的変数に一意な名前を生成する方法だ。従来のスキームはItanium ABI(C++で使用)に基づいており、2つの大きな欠点があった:ジェネリックパラメータのインスタンス化がハッシュの背後でのみ追跡され、その値が失われること、そして実装が一貫していないため、カスタムのデマングリングが依然として必要だったことだ。

Rust 1.59から-Csymbol-mangling-version=v0で利用可能だったv0スキームは、両方の欠点を修正する。2025年11月からナイトリーでデフォルトとなり、今回安定版となった。レガシースキームはナイトリー限定となり、削除が予定されている。

ほとんどの開発者にとって、これは見えない変更だ——コードのコンパイル方法は同じだから。しかし、objdumpやプロファイラでシンボルをデバッグしたことがあるなら、その違いを実感できるだろう。新しい名前はより多くの意味情報を保持しており、デバッグやリバースエンジニアリングが容易になる。

Cargo警告制御

CIで警告を拒否するのは常にハック的だった:RUSTFLAGS=-Dwarnings。これは機能するが、切り替えるたびにビルドキャッシュを無効化する。Rust 1.97ではCARGO_BUILD_WARNINGS(または設定ファイルのbuild.warnings)が導入され、キャッシュを破壊せずにallowwarn(デフォルト)、denyを設定できる。

これは生活の質の向上だ。リファクタリング中のノイズを消すためにCARGO_BUILD_WARNINGS=allow cargo checkを実行したり、CIでCARGO_BUILD_WARNINGS=denyを設定し、--keep-goingと組み合わせてすべてのエラーと警告を1回のパスで収集したりできる。

リンカー出力:非表示の廃止

rustcは、リンクが成功した場合にリンカーのstderrを飲み込んでいた。これにより実際の問題が隠されていた。現在、リンカーメッセージはlinker_messagesという警告リントとしてデフォルトで有効に出力される。rustcは既知の誤検知をフィルタリングするが、次のようにして無効化できる:

[lints.rust]
linker_messages = "allow"

linker_messagesは意図的にwarningsリントグループの一部ではないことに注意。リンカー出力はプラットフォーム依存であり、常にrustcの制御下にあるわけではないからだ。

安定化されたAPI

いつものAPI安定化のバッチ:Default for RepeatNCopy for ffi::FromBytesUntilNulError、UEFI上のSend for std::fs::File、そして整数とNonZeroに対するビット操作メソッドのセット:isolate_highest_oneisolate_lowest_onehighest_onelowest_onebit_width。また、char::is_controlがconstになった。

詳細はリリースノートを参照。

新しいマングリングスキームは以前のものの欠点を解決する:ジェネリックパラメータのインスタンス化は、ハッシュの背後でのみ追跡されるのではなく、その値を保持する。
Manul X 編集部