Linux 核心補丁第八版,支援 Rust 語言

Rust-for-Linux 專案的作者 Miguel Ojeda 提議發布用於以 Rust 語言開發裝置驅動程式的 v8 元件,供 Linux 核心開發人員考慮。 這是補丁的修訂版本,考慮到第一個版本,發佈時沒有版本號。 Rust 支援被認為是實驗性的,但已經包含在 linux-next 分支中,聲稱將整合到 5.20/6.0 的秋季版本中,並且已經足夠成熟,可以開始在核心子系統上創建抽象層以及編寫驅動程序和模組。 該開發由 Google 和 ISRG(網路安全研究小組)資助,ISRG 是 Let's Encrypt 專案的創始人,致力於推動 HTTPS 以及提高網路安全性的技術開發。

在新版本中:

  • 該工具包和 alloc 庫的變體在發生錯誤時不會產生「恐慌」狀態,並已針對 Rust 1.62 版本進行了更新。 與先前使用的版本相比,Rust 工具包穩定了對核心補丁中使用的 const_fn_trait_bound 功能的支援。
  • 綁定程式碼被分成一個單獨的板條箱包“綁定”,如果僅對主包“核心”進行更改,則可以簡化重建。
  • 宏「concat_idents!」的實現以過程巨集的形式重寫,該過程巨集不依賴 concat_idents 功能,並允許使用對局部變數的參考。
  • 「static_assert!」巨集已被重寫,允許在任何上下文中使用「core::assert!()」而不是常數。
  • 宏“構建錯誤!” 適合在為模組設定“RUST_BUILD_ASSERT_{WARN,ALLOW}”模式時工作。
  • 新增了一個帶有設定“kernel/configs/rust.config”的單獨檔案。
  • 巨集替換中處理的“*.i”檔案已重新命名為“*.rsi”。
  • 已停止支援建置最佳化等級與 C 程式碼不同的 Rust 元件。
  • 新增了 fs 模組,該模組提供用於處理檔案系統的綁定。 提供了一個用 Rust 寫的簡單檔案系統的範例。
  • 新增了用於處理系統佇列的工作佇列模組(提供對 work_struct 和 workqueue_struct 核心結構的綁定)。
  • kasync 模組的開發隨著非同步程式設計方法(async)的實現而持續。 新增了用 Rust 編寫的核心級 TCP 伺服器的範例。
  • 新增了使用 [Threaded]Handler 類型和 [Threaded]Registration` 類型在 Rust 語言中處理中斷的功能。
  • 新增了過程巨集“#[vtable]”,以便更輕鬆地使用函數指標表,例如 file_operations 結構。
  • 新增了雙向鍊錶「unsafe_list::List」的實作。
  • 新增了對 RCU(讀取-複製-更新)和 Guard 類型的初始支持,以檢查讀鎖是否已綁定到目前執行緒。
  • 新增了 Task::spawn() 函數來建立並自動啟動內核執行緒。 也加入了 Task::wake_up() 方法。
  • 新增了一個延遲模組,讓您可以使用延遲(msleep() 的包裝器)。

提議的更改使得使用 Rust 作為開發驅動程式和核心模組的第二語言成為可能。 Rust 支援作為一個選項提供,預設不啟用,並且不會導致 Rust 被包含為核心所需的建置依賴項。 使用 Rust 進行驅動程式開發將允許您以最小的努力創建更安全、更好的驅動程序,並且不會出現釋放後記憶體存取、空指標取消引用和緩衝區溢位等問題。

Rust 在編譯時通過引用檢查、跟踪對象所有權和對像生命週期(範圍)以及在代碼執行期間評估內存訪問的正確性來提供內存安全。 Rust 還提供防止整數溢出的保護,要求在使用前強制初始化變量值,更好地處理標準庫中的錯誤,默認應用不可變引用和變量的概念,提供強靜態類型以最小化邏輯錯誤。

來源: opennet.ru

添加評論