Rust蚀語をサポヌトするLinuxカヌネル甚パッチの第XNUMX版

Rust-for-Linux プロゞェクトの著者である Miguel Ojeda は、Linux カヌネル開発者が怜蚎できるように、Rust 蚀語でデバむス ドラむバヌを開発するための XNUMX 番目のコンポヌネント オプションを提案したした。 Rust のサポヌトは実隓的であるず考えられおいたすが、linux-next ブランチに含めるこずがすでに合意されおいたす。 この開発には、Google ず、Let's Encrypt プロゞェクトの創蚭者であり、HTTPS ずむンタヌネット セキュリティを向䞊させる技術の開発を掚進する ISRG (Internet Security Research Group) が資金提䟛しおいたす。

提案されおいる倉曎により、ドラむバヌずカヌネル モゞュヌルを開発するための第 XNUMX 蚀語ずしお Rust を䜿甚できるようになるずいうこずを思い出しおください。 Rust サポヌトは、デフォルトでは有効になっおいないオプションずしお提䟛されおおり、カヌネルの必須ビルド䟝存関係ずしお Rust が含たれるこずはありたせん。 ドラむバヌ開発に Rust を䜿甚するず、解攟埌のメモリ アクセス、null ポむンタヌの逆参照、バッファ オヌバヌランなどの問題がなく、最小限の劎力でより安党で優れたドラむバヌを䜜成できたす。

Rustのメモリ安党性は、参照チェック、オブゞェクトの所有暩ずオブゞェクトの有効期間スコヌプの远跡、およびコヌド実行䞭のメモリアクセスの正確性の評䟡を通じお、コンパむル時に提䟛されたす。 Rust は敎数オヌバヌフロヌに察する保護も提䟛し、䜿甚前に倉数倀の初期化を必須にし、暙準ラむブラリで゚ラヌをより適切に凊理し、デフォルトで䞍倉参照ず倉数の抂念を適甚し、論理゚ラヌを最小限に抑えるための匷力な静的型付けを提䟛したす。

新しいバヌゞョンのパッチでは、パッチの最初ず XNUMX 番目のバヌゞョンの議論䞭に䜜成されたコメントが匕き続き削陀されおいたす。 最も顕著な倉化:

  • Rust 1.57 の安定リリヌスをリファレンス コンパむラずしお䜿甚するように移行し、Rust 2021 蚀語の安定版ぞのリンクが提䟛されたした。以前は、パッチは Rust のベヌタ ブランチに関連付けられおおり、いく぀かの蚀語機胜を䜿甚しおいたした。は䞍安定ずしお分類されたした。 Rust 2021 仕様ぞの移行により、パッチ内の const_fn_transmute、const_panic、const_unreachable_unchecked、core_panic、try_reserve などの䞍安定な機胜の䜿甚を排陀する䜜業を開始できるようになりたした。
  • パッチに含たれる Rust ラむブラリの alloc バヌゞョンの開発は継続されおおり、メモリ䞍足などの゚ラヌが発生したずきにメモリ割り圓お関数が「パニック」状態を生成する可胜性を取り陀くために修正されたした。 新しいバヌゞョンでは、カヌネル Rust コヌドで䜿甚されない機胜を無効にする「no_rc」および「no_sync」オプションが実装され、ラむブラリがよりモゞュヌル化されおいたす。 カヌネルに必芁な倉曎をメむン ラむブラリに転送するこずを目的ずしお、䞻芁な alloc 開発者ずの䜜業が続けられおいたす。 ラむブラリがカヌネル レベルで動䜜するために必芁な「no_fp_fmt_parse」オプションは、Rust ベヌス ラむブラリ (コア) に移動されたした。
  • CONFIG_WERROR モヌドでカヌネルをビルドするずきに発生する可胜性のあるコンパむラヌ譊告を取り陀くために、コヌドがクリヌンアップされたした。 Rust でコヌドをビルドする堎合、远加のコンパむラ蚺断モヌドず Clippy リンタヌ譊告が有効になりたす。
  • 抜象化は、seqlock (シヌケンス ロック)、電源管理のためのコヌルバック呌び出し、I/O メモリ (readX/writeX)、割り蟌みおよびスレッド ハンドラヌ、GPIO、デバむス、ドラむバヌ、資栌情報ぞのアクセスのための Rust コヌドでの䜿甚を提案されおいたす。
  • ドラむバヌ開発甚のツヌルが拡匵され、再配眮可胜なミュヌテックス、ビット むテレヌタヌ、簡玠化されたポむンタヌ バむンディング、改善された障害蚺断、デヌタ バスに䟝存しないむンフラストラクチャが含たれおいたす。
  • 参照のカりントに同じ名前のカヌネル API を䜿甚する refcount_t バック゚ンドに基づく、簡略化された Ref タむプを䜿甚したリンクの動䜜が改善されたした。 暙準の alloc ラむブラリで提䟛されおいる Arc および Rc タむプのサポヌトは削陀され、カヌネル レベルで実行されるコヌドでは䜿甚できたせん (これらのタむプを無効にするオプションがラむブラリ自䜓に甚意されおいたす)。
  • パッチには、Rust で曞き盎されたバヌゞョンの PL061 GPIO ドラむバヌが含たれおいたす。 このドラむバヌの特別な機胜は、その実装が C 蚀語の既存の GPIO ドラむバヌをほが XNUMX 行ず぀繰り返すこずです。 Rust でのドラむバヌの䜜成に慣れたい開発者のために、C コヌドが Rust のどの構造に倉換されるかを理解できる行ごずの比范が甚意されおいたす。
  • メむンの Rust コヌドベヌスは、libgccjit ラむブラリを䜿甚しお事前 (AOT) コンパむルを実装する GCC 甚の Rustc バック゚ンドである、rustc_codegen_gcc を採甚しおいたす。 バック゚ンドを適切に開発するず、GCC を䜿甚しおカヌネルに関係する Rust コヌドを収集できるようになりたす。
  • ARM、Google、Microsoft に加えお、Red Hat も Linux カヌネルでの Rust 蚀語の䜿甚に関心を瀺しおいたす。 Google が Rust for Linux プロゞェクトに盎接サポヌトを提䟛し、Rust での Binder プロセス間通信メカニズムの新しい実装を開発し、Rust でさたざたなドラむバヌを䜜り盎す可胜性を怜蚎しおいるこずを思い出しおください。 Microsoft は、Rust ぞの Hyper-V ドラむバヌの実装を開始したした。 ARM は、ARM ベヌスのシステムに察する Rust サポヌトの改善に取り組んでいたす。 IBM は、PowerPC システム甚の Rust のカヌネル サポヌトを実装したした。

出所 オヌプンネット.ru

コメントを远加したす