オープンソースのプログラミング言語「Rust」を開発するRustプロジェクトは、Rustの新バージョン1.68.0を発表した。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
オープンソースのプログラミング言語「Rust」を開発するRustプロジェクトは2023年3月9日(米国時間)、Rustの新バージョン1.68.0を発表した。
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.