BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース LLVMネイティブコードカバレッジを備えたRust 1.60がリリース、Rust 2024へのロードマップも公開

LLVMネイティブコードカバレッジを備えたRust 1.60がリリース、Rust 2024へのロードマップも公開

原文(投稿日:2022/04/10)へのリンク

Rust 1.60では、LLVMネイティブ・インストルメンテーション(native instrumentation)を使用したソースベースのコードカバレッジの安定化、既定値としてのインクリメンタルコンパイルの再有効化、Instantに対する単調性保証の実施、などが行われている。2024年までのRustの進展に関するロードマップも公式に発表された。

バージョン1.60以前のRustコンパイラではGCCと同じく、gcovベースのカバレッジ実装を使用したコードカバレッジがサポートされていた。今回のリリースからLLVMのネイティブカバレッジ・インストルメンテーションの使用が可能になったことにより、効率性と正確性の向上が期待できる、とRustチームは述べている。

この新機能は、オプション"-C instrument_coverage"を指定することで有効になる。これにより、コードの条件付きセクションの実行時にプロファイリングカウンタをインクリメントするLLVMのllvm.instrprof.incrementイントリンシックの呼び出しが、関数やブランチに挿入されると同時に、解析された個々のライブラリやバイナリのデータセクションを特定する情報の埋め込みが行われる。完成したバイナリを実行するとdefault.profrawファイルが生成されるので、次のコマンドを実行することによってllvm-profdataを使った処理が可能になる。

rustup component add llvm-tools-preview
$(rustc --print sysroot)/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-profdata merge -sparse default.profraw -o default.profdata
$(rustc --print sysroot)/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-cov show -Xdemangler=rustfilt target/debug/coverage-testing \
    -instr-profile=default.profdata \
    -show-line-counts-or-regions \
    -show-instantiations

RustのInstantは、単調増加型のクロック測定値を提供する機能だが、旧バージョンのRustでは、おもにハードウエアや仮想化やOSのバグに関連する極めて特殊な条件下において、単調性の保証がされず、パニックを発生させることがあった。Rust 1.60では、これらレアケースを処理するための回避策が導入された。基本的には、時間値が負になる可能性のある呼び出し結果をゼロに飽和させることで、時間の前後関係の入れ替えを可能にする、というものだ。

デシリアライズエラーを引き起こす可能性のあるバグのため、Rust 1.59で無効になっていた既定値としてのインクリメンタルコンパイルが、前述のようにRust 1.60で改めて有効になった。

Rust Language Roadmap 2024は、今後数年間、Rustに対してどのような進展が期待できるかを明確にすることで、新たなコントリビュータが貢献方法を見つける手立てを提供するものだ。このロードマップは、学習曲線の平坦化、ユーザによる相互扶助の支援、Rustの大規模化支援という、3つの重要なテーマで構成されている。

2015年の発表以降、Rustはかなり使いやすい言語になっている、と開発チームは言う。

Rustユーザの大規模なチームを構築している企業からは、Rustエンジニアの一般的な立ち上がり期間は3~6か月だという報告を受けています。Rustを学んだ人たちは、ほとんどが気に入ってくれています。

とは言え、多くの人たちがRustの習得に苦労していることに間違いはない。その理由の多くは、コンパイラを習得する上で必要な、詳細な部分や言語の特殊性に関連する。そのために、2024年までの大きな目標として挙げられているのが、特に非同期や組み込みRustの分野でその種のオーバーヘッドを削減して、プログラマが自身のドメインの問題に集中できるようにすることだ。

"ユーザによる相互扶助の支援"に向けては、ライブラリ開発者の権限を強化することで、ユーザを支援する機会を少なくするような制限を排除することを目的とした施策が重要である、という点が理解されている。具体的には、ライブラリへの新機能の追加を管理しやすくすること、より豊かな抽象化を実現すること、エラーメッセージをカスタマイズ可能な範囲を拡大すること、相互運用性を向上すること、などが含まれる。

最後に重要なのは、言語をさらに成長させる点にも重点が置かれていることだ。

Rust 2024をリリースして、Rustで可能なことをすべて実現するには、何が行われていて、どのような支援が可能なのかを、人々が容易に見つけられるようなシステムが必要です。委託を通じて言語開発をスケールアップし、開発者たちが自らの情熱を傾けられるような開発ができるようにしたいと思っています。

この目標に向けて、Rust 2024では、開発状況をより理解しやすいものにすると同時に、オーナシップシステムとコミュニケーションを改善し、内部プロセスやツールを洗練させていく。

作者について

この記事に星をつける

おすすめ度
スタイル

BT