幾個星期前 關於的新聞 在中進行的一些實現 linux-next分支,其中包括一組初始組件 開發設備驅動程序 用Rust語言。
該文檔是關於在Linux內核中使用Rust以及使用Rust語言的帶有字符設備驅動程序的內核模塊示例單獨發布的。 該代碼由分支機構的維護者Stephen Rothwell添加。
之後,Linus Torvalds進行了實施審核 在Linux內核中設置Rust語言驅動程序的可能性補丁 並提出了一些批評。
最大的投訴是由 逃生的潛力 錯誤情況下的“運行時故障恐慌”, 例如,在內存不足的情況下,包括內核操作在內的動態內存分配操作可能會失敗。
托瓦爾茲 指出,對內核的這種關注從根本上是不可接受的, 而且,如果您不了解這一點,則可以完全拒絕嘗試使用這種方法的任何代碼。 另一方面,補丁程序的開發者同意該問題,並認為可以解決。
另一個問題是嘗試使用浮點數或128位類型, 對於像Linux內核這樣的環境無效。
您可能不了解何時可能發生的後果,所以也許
比我想像的要少的問題,但從根本上講
我認為如果任何Rust映射都可能引起恐慌,這簡直就是
_從根本上來說-不可接受。非核心控制器或代碼中的映射失敗,即
定義,所有新的Rust代碼永遠不會導致
有效地恐慌。 «哦,在某些情況下,我沒有嘗試使用
128位整數或浮點數'。因此,如果Rust編譯器導致無法執行的隱藏分配
檢測並作為錯誤返回,那麼我深信所有這一切
方法應該完全不適用,並且Rust基礎架構,
無論是在編譯器級別還是在內核包裝器中,您都需要更多
工作。
原來這是一個更嚴重的問題。,因為此刻 Rust的中央圖書館是不可分割的,代表著巨大的污點; 無法僅請求某些功能,從而避免使用一個或另一個有問題的功能。
解決該問題的方法可能需要更改rust編譯器和庫,儘管該團隊尚未制定有關如何為語言庫實現模塊化的策略。
另外, Torvalds指出所提供的示例控制器是無用的 並建議以解決實際問題之一的驅動程序為例。
在這之前 Google宣布參與一項旨在促進Linux內核中Rust支持的計劃 y 提供技術方面 實現Rust來解決由於使用內存錯誤而引起的問題的可行性。
Google認為Rust已準備好加入C作為開發語言 Linux內核組件。 本文還提供了在Android平台上使用Rust語言來開發內核驅動程序的示例(Rust被公認為是Android開發的官方支持語言)。
應該指出的是 Google準備了用Rust編寫的控制器的初始原型 Binder的進程間通信機制,這將允許在C和Rust中對Binder實現進行詳細的性能和安全性比較。
以目前的形式,工作尚未完成,但是對於Binder工作所需的內核功能的幾乎所有基本抽象,已經準備好在Rust代碼中使用這些抽象的層。
最後,如果您想了解更多信息,可以查看詳細信息 在下面的鏈接中。
考慮到Rust是一種與C語言不同的範例,Rust是一種新的語言,因此他們所有的批評都是有效的,對於庫或編譯器本身中的任何細節所引起的擔憂是可以理解的,儘管代碼是有效的,但它會導致內核也要破裂,如何實現和構建。 因此,諸如能夠將庫模塊化以僅調用程序所需的那些功能(或在此情況下,對於任何控制器)並使其保持活動狀態的建議可以正常工作。 您所要求的也不是沒有道理的,它們為您帶來了一個真正的原型控制器,可以很好地解決當前問題(或者至少可以完成與內核中現有任務相同的工作,並且不會出現恐慌)。
我時不時地重讀文章 Linux Adictos 但當我看到儘管內容非常好,但最終結果卻被可怕的拼字破壞時,我很快就感到絕望。
拼寫和語法會這麼難嗎?
丟人現眼!
振作起來!