
2026/11/13 3:39
Rust 1.100
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
はい、元のサマリーは具体的な技術的な安定化の範囲を捉えたり、アロケータの機能に関する曖昧さを解消したりするために改善が必要です。
改訂されたサマリー: Rust チームは公式にバージョン 1.100.0 をリリースしました。これは長待たされてきた機能である「never type」(
!)を安定化させ、より効率的でカスタマイズ可能なメモリ管理システムを構築するための強力な新 API を導入するマイルストーンです。このリリースには、トランザクションのような安全性を提供する DropGuard API、ゼロサイズタイプを作成するための conjure_zst、および Vec および Box 用のアロケータに特化したコンストラクタなど、主要な機能が追加されています。
アップグレードするには、ユーザーは
rustup update stableを実行するか、rustup が不足している場合は Rust ウェブサイトからツールを直接ダウンロードしてください。ほとんどの変更は安全ですが、2024 年版より前のエディションのユーザーにとっては重要な不互換の変更があります:never type の内部フォールバックが () から ! にシフトしました。開発者はコードを調整し、互換性を維持するために新しい Infallibleアリアスを使用する必要があります。また、このアップデートは Cargo において重大な安全性の向上をもたらしており、未使用の依存関係に対するデフォルト警告や、サプライチェーンリスクを軽減するための最小公開年齢の設定などが含まれます。チームは、早期の問題発見に貢献し、よりスムーズなエコシステムの発展を実現するため、ユーザーがベータまたはナイトリーチャンネルで今後のリリースを試すことを推奨しています。本文
Rust 1.100.0 のリリースのお知らせ
Rust チームより、Rust 1.100.0 が正式にリリースされました。信頼性が高く効率的なソフトウェア開発を可能にするプログラミング言語です。
インストールとアップデート
rustup を通じて以前のバージョンをインストールしている場合は、以下のコマンドを実行してください。
$ rustup update stable
まだインストールしていない方は、公式ウェブサイトから
rustup をダウンロードし、リリースノートを確認してください。
テスト目的でベータ版やナイティ版を使用する場合は、ローカル環境で更新を検討してください。
- ベータチャンネル:
rustup default beta - ナイティチャンネル:
rustup default nightly
不具合を発見の際は、ぜひご報告ください!
新機能と改善点
Never 型 (!
) の安定化
!10 年間の開発と 5 回の試みに伴い、ついに**「Never 型」**が安定化されました。この型は、決して値に到達しない分岐を表します。
- 定義: コード内で
と記述されます(例:!
、return
、break
など)。std::process::exit - 強制変換 (Coercion): 値が存在しないため、任意の型への変換が許可されます。これにより
またはmatch
の一部の分岐から無条件に抜けることが可能になります。iffn mrrrow(option: Option<u32>) { let value = match option { Some(x) => x, None => return, // `!` を `u32` に強制変換する }; // ... } - 名前指定の可能化: 以前は戻り型としてのみ命名できたものが、今回は任意の場所で指定可能です。
fn infallible_unwrap<T>(res: Result<T, !>) -> T { let Ok(v) = res; v } - Infallible の変更:
がInfallible
の別名に変わりました。互換性を保つため、以前使用していた API も!
として動作します。!- エディションへの影響: 2024 年版以前(2015, 2018, 2021)のエディションでは、フォールバック値が
から()
に変更されます。稀なケースでコードに影響を与える可能性があります。!
- エディションへの影響: 2024 年版以前(2015, 2018, 2021)のエディションでは、フォールバック値が
Allocator API の安定化
カスタムアロケータを定義し、標準ライブラリ型(
Vec, Box)と共同で使用できるようになりました。
- 新トレーイト: 新しく安定化した
トレーイトを通じて有効化されます。Allocator - プロジェクトゴール: これにより「Allocators 1.0」の基盤が完成し、近い将来さらに多くの機能が安定化する予定です。
DropGuard: クロージャーによる全終了パスの実行
Drop トレーイトは通常、変数がスコープ外になった際に実行されます(return, ?, パニックなどに関係なく)。
しかし、単に関数終了時にコードを実行したい場合のために、新しいヘルパー型
が導入されました。core::mem::DropGuard
- 機能: 変数とクロージャーを受け取り、破棄時にクロージャーを実行して変数を消費します。
- rollback 対応:
メソッドを実装しており、ガードから変数を返すことができます。トランザクション型 API の実装に適しています。dismissuse std::mem::DropGuard; fn parse_all(nums: &mut Vec<u32>, strings: &[&str]) -> Result<(), ParseIntError> { let len = nums.len(); let mut nums = DropGuard::new(nums, move |nums| { nums.truncate(len); // 失敗時のロールバック処理 }); for s in strings { nums.push(s.parse()?); // エラーなら自動ロールバック } DropGuard::dismiss(nums); // 成功ならガード解除 Ok(()) }
Zero-Sized Type (ZST) の生成ガイドラインの明確化
ゼロサイズ型を unsafe な方法で作成する際の推奨アプローチが明確化されました。
- 専用関数:
を使用することで、安全性を保証した ZST の作成が可能です。std::mem::conjure_zst - 注意点: この関数は
です。多くの API は安全性のために ZST の作成を禁止しており、誤って生成すると前提条件(例:Python GIL 保持)が違反されるリスクがあります。unsafe
Cargo: 未使用の依存関係の報告
ビルド速度低下の原因となる使われなくなった依存関係を、Cargo が自動的に検出して警告します。
- 検出対象: 特定のプラットフォームやビルドターゲットでのみ必要な依存関係です。
- 警告表示例:
warning: unused dependency `tracing-subscriber` --> Cargo.toml:23:1 | 23 | tracing-subscriber.workspace = true | ^^^^^^^^^^^^^^^^^^ | = note: `cargo::unused_dependencies` はデフォルトで `warn` に設定されています help: `tracing-subscriber` への依存関係の削除を検討してください - 表示制限: すべてのビルドターゲットが実行された場合のみ表示されます。部分的なチェック(例:
)では表示されません。cargo check --bin foo
Cargo キャッシュ競合の削減
ビルドディレクトリの再構成により、キャッシュの衝突や不要な再ビルドが減りました。
- 変更内容: ビルド設定のハッシュを consistently 適用し、ファイルタイプ中心からビルドステップ中心に整理しました。
- 効果:
を共有する Git ワークツリーでの問題が改善され、より確実なキャッシュ利用が可能になります。build-dir - 今後の計画: この変更は「ビルドディレクトリのレイアウト」プロジェクトゴールの基盤となり、ガベージコレクションやクロスワークスペースキャッシングなど、さらに多くの改善へのマイルストーンとなります。
Cargo min-publish-age(依存関係のクールダウン)
サプライチェーン攻撃を軽減するために、新しいパッケージの公開から数日待つ仕組みが導入されました。
- 設定方法:
で有効化します。.cargo/config.toml[registry] global-min-publish-age = "3 days" - 動作: 新しいバージョンが公開されていても、設定された期間(例:3 日)未満の場合はインストールに含みません。
- 例外: 緊急対応時は
フラグを使用できます。CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow
安定化した API
以下の API が正式に安定化されました。
Never 型 (
) 関連:!
impl AsRef<T> for !impl AsMut<T> for !core::mem::DropGuardcore::mem::conjure_zst
Allocator 関連:
,std::alloc::Allocator
,Global
の実装および関連メソッド (System
,Box::new_in
など)Vec::new_in- アロケータ指定のコンストラクタや変換メソッド (
,from_raw_in
など)into_raw_with_allocator
メモリ管理・安全:
UnsafeCell::replaceUnsafeCell::as_ref_uncheckedUnsafeCell::as_mut_unchecked
の実装std::sync::Once::Default
,Box::take
,Box::map
,Rc::mapArc::mapVec::from_fn
文字列・パス:
,str::trim_prefixstr::trim_suffix
,[T]::trim_prefix[T]::trim_suffixPath::trim_prefix
その他:
(プロセス管理)Child::main_thread_handleos::windows::process::CommandExt::show_windowbool::toggle
今後の予定
- ビルドディレクトリのレイアウト: 2025 年のプロジェクトゴールとして、キャッシュのガベージコレクションやクロスワークスペースキャッシングの機能をブロック解除する予定です。
- crates.io サプライチェーン強化: 隔離サポートや疑わしいリリースの自動検出など、エコシステム保護のためのさらなる作業が進められています。
謝辞
Rust 1.100.0 の実現には多くの貢献者が協力しました。皆様のおかげでこのリリースが可能になりました。感謝申し上げます!