プログラミング言語: Rust が Chromium に登場する理由は次のとおりです。

画像:マスコット/ゲッティイメージズ

Google Chrome の背後にあるオープンソース プロジェクトである Chromium は、今のところ限定的な方法ではあるが、C++ コードベースで Rust の新しいサポートを有効にしています。

Microsoft Edge、Opera、Vivaldi、その他多数のブラウザーを支えるプロジェクトである Chromium は、C++ からのサードパーティ Rust ライブラリの使用をサポートします。 Chrome セキュリティ チームの Dana Jansens 氏によると、チームは来年中に Chrome バイナリで Rust コードを有効にするツールを導入する予定です。

「現在、Rust ツールチェーンをビルド システムに追加することを積極的に進めています」と Jansens 氏は書いています。

Chromium でサードパーティ ライブラリに Rust を許可することは、最新のメモリ セーフな言語に向けた重要な動きですが、2021 年 4 月に Rust を新しいプラットフォーム言語として導入した Android オープン ソース プロジェクト (AOSP) よりもはるかに制限されています。 C および C++ の。

また: プログラミング言語: この昔からのお気に入りが再び人気を博している理由

AOSP により、Rust によるネイティブ OS コンポーネントの開発が可能になり、現在 AOSP の新しいコードの 21% を占めています。 この変化は、メモリの安全性に関する脆弱性が Android の脆弱性全体の 76% から 35% に減少したことと一致しています。

AOSP、AWS、Linux カーネル プロジェクト、Meta、Microsoft など多くの企業が、メモリの安全性を保証するためにシステム プログラミングに Rust を採用しています。 大まかに言うと、Rust はメモリ関連の脆弱性 (ソフトウェア セキュリティの問題の大部分を占める) を軽減するのに役立ちます。メモリに安全でない C および C++ で記述されたコードによって導入され、プログラマはメモリの安全規則を簡単に破ることができます。 Apple は 10 月に、iPhone、iPad、および Mac で使用されるカーネルである XNU でメモリの安全性にどのように対処しているかを詳しく説明しました。

Chrome のセキュリティ チームは昨年、Rust をプラットフォーム言語と見なしていたが、MicraclePtr C++ スマート ポインターなどのプロジェクトを通じて C++ にメモリの安全性をもたらすことを試みながら、当面は C++ を主要言語として維持することを選択したと述べました。

ただし、ヤンセン氏は、Chrome セキュリティ チームが Rust を Chromium に導入するというアイデアを完全に封じ込めていないことを示唆しており、Rust が時間の経過とともにどのように適合するかを調査し続けていることを詳しく説明しています。

今のところ、Chromium プロジェクトはこれらのライブラリに対して Rust にいくつかの制約を課しています。 たとえば、既存のサードパーティ ライブラリおよび関連する C++ と比較した場合に、メモリ バグ、クラッシュ、およびその他の問題のリスクを大幅に軽減するなどの「ビジネス ニーズ」がある場合、Rust for Chromium サードパーティ ライブラリが許可されます。ライブラリを使用するために必要なコード」。

「私たちはゆっくりと始めており、準備が整ったら検討するライブラリについて明確な期待を設定しています」と Jansens 氏は述べています。

彼女のチームは、「ソフトウェア スタックの途中であっても、C++ ではなく Rust の記述に段階的に移行することの意味」を調査し、「安全でシンプルで信頼性の高い相互運用性の限界は何か」を理解していると述べています。

また: ローコードは、まだ働きすぎの IT 部門の治療法にはなりません

Rust のサポートをサードパーティ ライブラリに限定することに加えて、チームは、依存関係ツリーの形状を制御するために、C++ から Rust への一方向の相互運用性のみをサポートすることを選択しました。

「Rust は C++ に依存できないため、依存性注入を除いて、C++ の型と関数について知ることはできません。このようにして、Rust は任意の C++ コードに到達できず、C++ から API を介して渡された関数にのみ到達できます」と Jansens は述べています。

Jansens は、C/C++ と Rust の完全な相互運用性を言語間で許可するのはリスクが高すぎると説明しています。 チームは、Chrome の「非常に幅広い C++ API」に対して Rust コンポーネントを構築することの意味を調べました。

「大まかに言えば、C++ と Rust は異なるルールで動作するため、状況が非常に簡単に横道に逸れる可能性があることがわかりました」と彼女は述べています。

また、現在、各言語のコンパイラと型システムからのサポートを提供する相互運用性 (interop) ツールも不足しています。 彼女は、ある言語の概念が別の言語には存在しないという問題を指摘しています。

Google は、Crubit と呼ばれる C++/Rust 双方向相互運用ツールに取り組んでいます。 ただし、Google はこの段階では「非常に実験的な」ツールであると説明しており、使用しないようアドバイスしています。

「コンパイラと型システムを介してサポートを提供する相互運用ツールがなければ、開発者は C++ から違反しないようにするために、Rust コンパイラによって行われるすべての仮定を理解する必要があります」と彼女は指摘します。

「このフレーミングでは、C++ は安全でない Rust によく似ています。安全でない Rust はプロジェクトにとって非常にコストがかかりますが、そのコストはカプセル化して最小限に抑えることで管理されます。同様に、C++ の完全な複雑さは、相互運用のために設計された狭い API は、同様のカプセル化を提供できます。相互運用ツールが、言語間でより広い API を可能にする他の方法でカプセル化を提供できることを願っています。」

Leave a Comment

Your email address will not be published. Required fields are marked *