日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rust编程之道 pdf_LPC: 想在内核里引入Rust,还需要做很多决定

發布時間:2025/3/19 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rust编程之道 pdf_LPC: 想在内核里引入Rust,还需要做很多决定 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在今天的Linux Plumbers Conference 2020大會上,Geoffery Thomas等人以“Barriers to in-tree Rust”為主題,討論了想要把Rust引入到Linux內核項目中作為一種可選的開發語言,還需要解決的一些問題。

Rust適合作為內核開發語言主要有兩點原因:

  • Rust是一個C語言很好的替代,很符合Linux內核對編程語言的需求:沒有垃圾回收,更符合內核的面向對象模型。
  • 使用Rust更容易編寫安全的代碼。造成安全問題的use-after-free,緩存溢出,未初始化的內存等等的程序缺陷很容易避免。
  • Rust的優勢讓很多開發者感受到了吸引力。對新項目來說,選擇Rust的技術困難可能不太大,但是對已有項目來說,到底有多可行呢?Linux社區已經在嚴肅的考慮這個問題。除了“可能沒人懂Rust的patch怎么review因為沒有用過Rust”這種雞生蛋的問題以外,還有一些更加實際的項目框架問題需要考慮:

    Cargo和庫

    Cargo是Rust官方的項目管理工具,可以安裝和管理依賴,也可以控制構建過程。Geoffery認為雖然cargo的依賴管理對內核完全沒有用(比如編譯內核的過程不能依賴從網絡上下載一個庫,所有的代碼都必須是in-tree的),但是使用cargo還是有一定的意義的(具體是什么并沒有深入)。

    Rust的語言的運行時包含core / alloc / std三個層級,其中core是最核心的,內核代碼也需要用到。alloc需要運行時里包含動態內存管理,這個在內核里是有的(kmalloc),但是有人指出,內核GPF_*的API可能比較難適配。std庫基本是封裝操作系統的輸入輸出,文件操作等API,所以在內核里是用不到的。

    跟C語言之間的ABI

    兩個語言之間如何互相調用?這個Rust是支持的,也不是Linux特有的問題,工具也有,但是如果大量的涉及到一些比較底層的操作,比如位操作、#ifdef檢測config、以及各種C的預處理技巧,怎么在Rust里保持一致等等,可能會導致一些混亂。感覺像trace這樣的框架,是不是需要用Rust重新實現一次呢?

    RCU

    內核使用了很多精細的同步機制,比如RCU。在討論到怎么樣從Rust訪問RCU保護的數據時,Geoffery認為從語言層面是可行的,也有一些代碼適配的進展。具體可以見

    https://github.com/fishinabarrel/linux-kernel-module-rust/pull/250

    除此之外,還有一些Rust語言特性導致的數據結構區別,比如雙鏈表等,似乎也不是很大的困難——常見問題已經有一些可以參考的庫和unsafe大法來解決(來自Rust社區的說法)。

    GCC編譯

    rustc目前依賴LLVM作為編譯工具,但是GCC仍然是內核的主流編譯方式。使用LLVM編譯整個內核可能是目前比較可行的做法,因為大家對混合LLVM+GCC的方式表示了一些擔憂——使用兩套編譯器就無法做LTO,更重要的是,兩個編譯器的微妙差異可能會導致內部ABI不兼容問題。還有人提出,應該考慮給GCC添加一個Rust前端。

    多平臺支持

    Linux支持的體系結構眾多,Rust暫時還不能全部覆蓋。(主要是arc, sparc32)

    不過這個問題可以用“先讓一部分人Rust起來”的思路解決。

    mrustc

    除了把Rust代碼編譯成.o再跟C語言的目標文件鏈接在一起,還有一種可能是用mrustc把Rust代碼翻譯成C,再進行編譯。

    https://github.com/thepowersgang/mrustc

    Linus Torvalds的態度

    https://lkml.org/lkml/2020/7/10/1261

    I’d want the first rust driver (or whatever) to be introduced in such a simple format that failures will be obvious and simple.

    總結

    所謂魔鬼都在細節之中。對內核項目來說,要引入一個新的語言并不容易。即使沒有致命的問題,也需要投入很多的精力來排除一些障礙,讓雙語言開發被流暢的支持。如果Linux真的能夠采納Rust,那對整個Rust生態必將是一個巨大的利好消息。

    最后,這次雖然更多的是一個主題討論,不過還是有一份演講的slides可以看的:

    https://linuxplumbersconf.org/event/7/contributions/804/attachments/641/1168/barriers-to-in-tree-rust.pdf

    總結

    以上是生活随笔為你收集整理的rust编程之道 pdf_LPC: 想在内核里引入Rust,还需要做很多决定的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。