Linux核心加入了Rust語言支援

banq發表於2021-07-07

Rust作為第二語言的支援的補丁系列已經加入到 Linux 核心。
Linux創始人Linus一直非常挑剔,甚至對C以外的系統程式語言不屑一顧。但是對於 Rust,他則不同,這可能是一個很好的跡象,表明 Rust 正在做一些非常值得尊敬的事情。無論如何,Rust語言似乎有潛力在幾年內成為一種新的主​​流系統程式語言。
 Rust相對於 C++可專門解決Linux的幾個特點:
  • Rust 特性使對通用程式碼的推理比 C++ 模板更容易。在 C++ 中,您只需編寫模板,然後在例項化站點解析模板。如果它不是一個有效的型別,那麼編譯器會告訴你你使用了錯誤的模板,但找出原因仍然是你的責任。然而,在 Rust 中,泛型型別必須受到 trait 的約束;其中列出了泛型型別需要什麼。因此,如果您濫用泛型型別,編譯器只會說“好吧,您需要在此處新增引數 T 來呼叫它”,並且錯誤將始終出現在您使用的型別上,而不是某個依賴的泛型型別上。
  • Rust 的核心目標之一是“零成本抽象”。它做得很好,但它也有一些非零成本的抽象。這些歸類為“透明且可預測的成本抽象”。例如: Rust 以其借用檢查器而聞名,它提供記憶體安全的編譯時驗證。然而,這些可能不是最靈活的記憶體管理解決方案。因此它還透過引用計數提供共享所有權。這確實有相關的成本,但很容易推理和明確說明。他們甚至提供了原子和非原子引用計數選項,因為後者的相關成本更低。
  • C++ 使用圍繞堆疊展開構建的異常處理模型,這要求所有程式碼維護一個有效的堆疊,C++ 執行時可以始終展開該堆疊。這可能會給核心帶來問題,核心幾乎肯定會對編譯器無法完全理解的堆疊做一些奇怪的事情。雖然 Rust 有異常(Panicking)並支援C++ 風格的展開,但它還允許您將異常處理模型更改為僅終止程式,這與 Linux 核心處理異常的方式更好地匹配。
  • - Rust 還非常不鼓勵使用與 C++ 相關的異常。Panicking主要用於實際異常(即意外)的錯誤條件,預期的錯誤條件可以使用返回型別(如 Option 和 Result)發出訊號。甚至還有特殊的語言語法(稱為 Try 或 ? 運算子),如果值發出錯誤訊號,它將自動返回。


 

相關文章