Rust言語をサポートするLinuxカーネル用のパッチのXNUMX番目のバージョン

Rust-for-Linux プロジェクトの作者である Miguel Ojeda は、Linux カーネル開発者による検討のために、Rust 言語でデバイス ドライバーを開発するための v8 コンポーネントのリリースを提案しました。 これは、バージョン番号なしで公開された最初のバージョンを考慮した、パッチの改訂版です。 Rust のサポートは実験的であると考えられていますが、すでに linux-next ブランチに含まれており、5.20/6.0 の秋リリースに統合されると主張しており、カーネル サブシステム上に抽象化レイヤーを作成したり、ドライバーを作成したりする作業を開始できるほど十分に成熟しています。そしてモジュール。 この開発には、Google と、Let's Encrypt プロジェクトの創設者であり、HTTPS とインターネット セキュリティを向上させる技術の開発を推進する ISRG (Internet Security Research Group) が資金提供しています。

収録曲:

  • ツールキットと alloc ライブラリのバリアントは、エラー発生時に「パニック」状態が生成される可能性がなく、Rust 1.62 のリリース用に更新されました。 以前に使用されていたバージョンと比較して、Rust ツールキットはカーネル パッチで使用される const_fn_trait_bound 機能のサポートを安定させました。
  • バインディング コードは別個のクレート パッケージ「バインディング」に分割されており、メイン パッケージ「カーネル」のみに変更が加えられた場合の再構築が簡素化されます。
  • マクロ「concat_idents!」の実装concat_idents 機能に関連付けられておらず、ローカル変数への参照を使用できるようにする手続き型マクロの形式で書き直されました。
  • 「static_assert!」マクロが書き直され、定数の代わりに任意のコンテキストで「core::assert!()」を使用できるようになりました。
  • マクロ「build_error!」 モジュールに「RUST_BUILD_ASSERT_{WARN,ALLOW}」モードが設定されている場合に動作するように適応されました。
  • 「kernel/configs/rust.config」設定を含む別のファイルを追加しました。
  • マクロ置換で処理される「*.i」ファイルの名前が「*.rsi」に変更されました。
  • C コードで使用される最適化レベルとは異なる最適化レベルで Rust コンポーネントを構築するためのサポートは廃止されました。
  • ファイル システムを操作するためのバインディングを提供する fs モジュールを追加しました。 Rust で書かれた単純なファイル システムの例が提供されます。
  • システム キューを操作するための workqueue モジュールを追加しました (work_struct および workqueue_struct カーネル構造に対するバインディングを提供します)。
  • kasync モジュールの開発は、非同期プログラミング手法 (async) の実装とともに継続されました。 Rust で書かれたコアレベルの TCP サーバーの例を追加しました。
  • [Threaded]Handler タイプと [Threaded]Registration` タイプを使用して Rust 言語で割り込みを処理する機能が追加されました。
  • file_operations 構造体などの関数ポインターのテーブルの操作を容易にするために、手続き型マクロ「#[vtable]」が追加されました。
  • 双方向リンクリスト「unsafe_list::List」の実装を追加しました。
  • 読み取りロックが現在のスレッドにバインドされているかどうかを確認するための RCU (読み取りコピー更新) とガード タイプの初期サポートが追加されました。
  • カーネル スレッドを作成して自動的に開始する Task::spawn() 関数を追加しました。 Task::wake_up() メソッドも追加されました。
  • 遅延を使用できるようにする遅延モジュール (msleep() のラッパー) を追加しました。

提案されている変更により、Rust をドライバーとカーネル モジュールの開発用の第 XNUMX 言語として使用できるようになります。 Rust サポートは、デフォルトでは有効になっていないオプションとして提供されており、カーネルに必要なビルド依存関係に Rust が含まれることはありません。 Rust を使用してドライバを開発すると、解放後のメモリ領域へのアクセス、null ポインタの逆参照、バッファ オーバーランなどの問題がなく、最小限の労力でより安全で優れたドライバを作成できます。

Rustのメモリ安全性は、参照チェック、オブジェクトの所有権とオブジェクトの有効期間(スコープ)の追跡、およびコード実行中のメモリアクセスの正確性の評価を通じて、コンパイル時に提供されます。 Rust は整数オーバーフローに対する保護も提供し、使用前に変数値の初期化を必須にし、標準ライブラリでエラーをより適切に処理し、デフォルトで不変参照と変数の概念を適用し、論理エラーを最小限に抑えるための強力な静的型付けを提供します。

出所: オープンネット.ru

コメントを追加します