Rust バージョン1.68.0、気になる更新内容をチェック:ローカルピンの構築、デフォルトの割り当てエラーハンドラーなど
オープンソースのプログラミング言語「Rust」を開発するRustプロジェクトは、Rustの新バージョン1.68.0を発表した。
オープンソースのプログラミング言語「Rust」を開発するRustプロジェクトは2023年3月9日(米国時間)、Rustの新バージョン1.68.0を発表した。
1.68.0安定版に含まれるもの
Cargoの“sparse”レジストリプロトコル
Cargoの"sparse"レジストリプロトコルは、crates.ioのプライマリレジストリで公開されているものに対して、インフラとともにcrateのインデックスを読むために安定化している。以前のgitプロトコル(デフォルトのもの)は、レジストリで利用可能な全てのクレートをインデックス化したリポジトリをクローンしていたが、スケーリングが限界に近づき、リポジトリの更新中に遅延が発生するようになった。新しいプロトコルは、実際に使用するクレートのサブセットに関する情報のみをダウンロードするため、crates.ioにアクセスする際の性能改善が期待できる。sparseプロトコルは1.70.0のリリースでcrates.ioのデフォルトになることが予定されている。
crates.ioでsparseプロトコルを使用するには、環境変数
CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
を設定するか、.cargo/config.tomlファイルを以下のコードで追加する。
[registries.crates-io] protocol = "sparse"
ローカルピンの構築
新しいpin!マクロは、T型からPin<&mut T>を構築し、匿名でローカル状態をキャプチャする。これはしばしば「スタックピニング(stack-pinning)」と呼ばれるが、この「スタック」とは、async fnやblockでキャプチャされた状態のことも指す。このマクロは、tokio::pin!のような幾つかのクレートに似ているが、標準ライブラリは、より表現的なマクロを実現するために、Pinの内部と一時的なライフタイム延長を利用することが可能だ。
デフォルトの割り当てエラーハンドラー
Rustにおいて、Box::newやVec::pushのようなAPIで割り当てが失敗した場合、失敗を示す方法がないため、何らかの異なる実行パスを取る必要がある。stdクレートを使用する場合、プログラムはstderrに出力され、中止する。Rust1.68.0以降、stdを含むバイナリはこの動作を維持する。stdを含まないバイナリ(allocのみを含む)は、割り当て失敗時にpanic!を発生させる。必要に応じ#[panic_handler]を介してさらに調整できる。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
Rustプロジェクト、大規模な言語拡張対応など「型チーム」で実装する2027年までの計画を発表
Rustプロジェクトは、2022年に設立された「型チーム」のこれまでの活動と今後の計画を紹介した。プログラミング言語「Rust」とは? "Hello, World!"で基本を押さえる
Rustはどのようなプログラミング言語なのでしょうか? 本連載のスタートとなる今回は、Rust言語の概略と、手元にRustの動作環境構築までを紹介します。導入で利用可能になるコマンドと、最初のHello, World!プログラムも取り上げます。宣言的マクロと手続き的マクロ――Rustのマクロ機能を使ってみる
メタプログラミングの手法に、C/C++言語で普通に使われているマクロ機能があります。最終回である今回は、それらより安全な実装となっているRustのマクロ機能について。