Rust 1.97 の新機能 - v0シンボルマングリングのデフォルト化とCargoの警告制御

Rust 1.97 の新機能 - v0シンボルマングリングのデフォルト化とCargoの警告制御

作成日:
読了:9
更新日:
この記事を読む人におすすめPR / Amazonアソシエイト

当サイトは 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.warningsresolver.lockfile-path の設定が安定化、--manifest-path に短縮形 -m が追加

アップデートは rustup update stable で行えます(後述)。Rust そのものが初めての方は、先にRust と rustup の始め方を読むと本記事の内容も追いやすくなります。

言語・コンパイラの変更

v0シンボルマングリングがデフォルトに

今回の最大の変更は、コンパイラが吐き出すシンボル名のマングリング方式が v0 スキームでデフォルトになったことです。マングリングとは、関数やジェネリック型などの名前を、リンカやデバッガが扱える一意の文字列へ符号化する仕組みです。

従来の(レガシーな)方式にはいくつかの弱点があり、たとえばジェネリックパラメータの値が保持されない、名前の一意性に不整合が出るといった問題がありました。Rust 独自に設計された v0 スキームはこれらを解消し、シンボル名がより正確で衝突しにくくなります。

レガシー方式は今後 nightly ビルドに限定され、将来的な削除が予定されています。JS ツールチェーンや型システムが各所でネイティブ実装・再設計へ進む流れ(Oxc / OxlintBun の 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_binary lint が追加されました(バイナリクレート内の未使用な 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_oneOption最上位の 1 のビット位置を返す(0 なら None)
lowest_oneOption最下位の 1 のビット位置を返す(0 なら None)
bit_width整数値の表現に必要な最小ビット数を返す(0 なら 0)

実際の使用例です。

Rust 1.97 の整数ビット操作API
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_zerostrailing_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 でも指定できます。

.cargo/config.toml で警告を deny にする
[build]
warnings = "deny"

rustdoc 側でも --emit フラグと --remap-path-prefix が安定化されています。

非互換・注意点

WARNING

v0 シンボルマングリングのデフォルト化により、古いバージョンのデバッガやプロファイラが Rust の吐くシンボルをうまくデマングル(元の名前に復元)できない場合があります。gdb / lldb / perf などを使っている場合は、ツール側を新しめのバージョンへ更新しておくと安全です。

レガシーマングリングは nightly でのみ利用可能になり、将来的に削除される見込みです。恒久的にレガシー方式へ固定する運用は避け、v0 前提へ移行しておくのが無難です。

アップデート方法

rustup を使っていれば、次のコマンドで安定版チャンネルを 1.97.0 へ更新できます。

Rust を 1.97.0 へ更新
rustup update stable
rustc --version

rustup 自体をまだ導入していない場合や、ツールチェーン管理の基本を確認したい場合はRust と rustup の始め方を参照してください。ネイティブ実装への移行という点では、TypeScript のネイティブコンパイラ(Corsa)の動きとも通じるものがあります。

まとめ

Rust 1.97.0 は、派手な新構文こそ少ないものの、コンパイラとツールの足回りを整える実務寄りのリリースです。

  • v0 シンボルマングリングのデフォルト化で、シンボル名がより正確に。古いデバッガ/プロファイラは更新推奨
  • Cargo の build.warnings 安定化で、CI の警告ゼロ強制がキャッシュを壊さずに書けるように
  • 整数のビット操作APIchar::is_control の const 化で、標準ライブラリの表現力が向上

rustup update stable で更新し、まずは CI の警告制御と新しいビット操作メソッドから取り入れてみてください。

Astro 7 リリース - コンパイラもMarkdownもRust化、Vite 8でビルドが最大61%速く

Astro 7 リリース - コンパイラもMarkdownもRust化、Vite 8でビルドが最大61%速く

7

Astro 7 が2026年6月22日にリリースされました。.astro コンパイラを Go から Rust へ書き換え、Markdown/MDX 処理系に Rust 製の Sätteri を採用(デフォルト化)、バンドラは Vite 8(Rust 製 Rolldown)。ビルドは公式報告で15〜61%高速化。Queued Rendering の安定化、src/fetch.ts による高度ルーティング、Route Caching、AI エージェント検出付きのバックグラウンド開発サーバーなどの新機能と、HTML 厳格化や Sätteri デフォルト化(remark/rehype は明示オプトイン)といった6→7の破壊的変更を、Astro 公式を一次ソースに整理します。

Bun のコアが Zig から Rust へ - Claude が6日で約100万行を書き換えた話(安定版はまだZig)

Bun のコアが Zig から Rust へ - Claude が6日で約100万行を書き換えた話(安定版はまだZig)

8

JavaScript ランタイム Bun が、コアを Zig から Rust へ書き換える巨大 PR(#30412、約100万行追加・6,755コミット)を2026年5月14日に main へマージしました。Anthropic の Claude Code(dynamic workflows)でほぼ全自動生成され、人手なら約1年の作業が約6日で完了したとされます。ただし安定版は今もZig実装で、Rust版は canary 提供。書き換えの理由(Zigのno-AIポリシー・Rustのコミュニティ・メモリ安全性)、unsafeブロック1.3万個などの論争点、AI駆動開発の意味までを一次ソースで整理します。

Rust 入門 - rustup でインストールして、コラッツ数列ツールで動作確認する

Rust 入門 - rustup でインストールして、コラッツ数列ツールで動作確認する

13

Rust をこれから触る人向けに、言語の特徴(所有権・借用によるメモリ安全、GCなしの高速性、Cargo と充実したツール)を整理し、公式の rustup でのインストール手順、cargo の基本コマンドを通します。最後に動作確認として書いた「コラッツ数列ジェネレータ」を題材に、Result によるエラー処理、checked_mul でのオーバーフロー対策、構造体とテストの同居といった Rust らしい書き方を、実際の実行結果つきで紹介します。Rust 1.96.0 / edition 2024 で検証。