每日最新頭條.有趣資訊

微軟正用 Rust 重寫 Windows 組件

作者丨小智

Rust 是過去一年時間裡,熱度持續增加的一門新興語言。2006 年,“職業編程語言工程師” Graydon Hoare 設計了這門語言,它的設計初衷是可以提供高的開發效率,代碼容易維護,性能還能與 C/C++ 媲美,還得保證安全性的一門語言。

雖然歷史發展的規律告訴我們,為了解決一門語言的問題而創造的新語言,最終也將帶來新的問題。但就目前來看,Rust 上述的這些特性在其迅猛的發展勢頭中得到了體現。

今年 2 月初,微軟一次演講中提到,70% 的安全漏洞都是記憶體安全問題。此後 7 月份,微軟安全響應中心(MSRC)發文表示:微軟需要更安全的系統編程語言。此後的系列文章中,微軟對自己為什麽認為 Rust 語言目前是業界的最佳選擇做了闡述。而在近日,微軟透露了使用 Rust 代替 C/C++ 編寫 Windows 組件的實驗感受,工程師們直言使用 Rust 語言的感受妙不可言。

我的任務是對 Windows 代碼庫的一個低級別系統組件進行實驗性重寫(目前不能透露是哪個組件),雖然這個項目還沒有完成,但總的來說,在 Rust 方面的試驗體驗是非常好 (generally positive)。新的組件或現有的具有乾淨接口的組件移植到 Rust 是很容易的。

爽翻了的開發體驗

對於習慣於編寫複雜系統的 C++ 開發人員來說,使用 Rust 作為開發語言就像是呼吸一股清新的空氣。Rust 編譯器提供的記憶體和數據安全保證給了開發人員更大的信心,開發人員花在調試瑣碎問題上的事件更少了。

Rust 的編譯器的警告和錯誤消息編寫得非常好,從而使 Rust 新手程序員可以快速識別並解決代碼中的問題。VSCode 已經具有有用的擴展(RLS),可提供了智能感知建議和語法高亮顯示。另外,Cargo 構建工具在測試、文檔生成和自動格式化方面提供了非常有用的功能。

學習曲線

Rust 具有大量的在線文檔和非常有用的編譯器錯誤消息,對於常年使用 C++ 的開發人員來說,Rust 的學習曲線非常簡單。此外,Rust 還有專門針對 C/ C++ 系統工程師的教程。Facebook 的 Jeremy Fitzhardinge 在 RustConf 2019 年的演講中指出,他發現有經驗的 C/ C++ 開發人員在大約四周內就可以上手使用 Rust,熟練使用只需要八周。

微軟的開發者也表示,自己參加了一年一度的微軟內部“One Week”黑客馬拉松,同行的有一個經驗豐富的 Rust 開發者和一個完全的 Rust 新手開發者。三天之內,Rust 的新手開發人員已經寫了超過 1000 行慣用的 Rust 代碼。

除了出色的文檔外,還有諸如 Clippy 之類的有用工具,使經驗豐富的 C++ 開發人員可以直接使用 Rust 進行編碼,而無需那些具有 Rust 經驗的人直接的幫助。

隨著微軟內部擴大對 Rust 的使用,工程師們相信為包含 Rust 代碼的任何 PR 創建 RustReviewers 組都是明智的。無論特定的問題領域是什麽,都將有助於不同團隊的新手從 Rust 專家那裡獲得反饋。

通常,新組件或具有乾淨接口的現有組件最容易移植到 Rust。微軟工程師們在重寫的組件則充滿了挑戰,因為從一層到另一層泄漏了許多抽象,需要一些初步的重構才能取得進展。

安全

為了從 Rust 獲得所需的安全保證,必須圍繞使用 unsafe 關鍵字放置嚴格的準則。對 FFI 函數的任何調用都應在包裝函數中進行,該包裝函數圍繞它提供安全的抽象。同樣,必須使用 unsafe 關鍵字的任何其他代碼都應具有提供安全抽象的包裝函數或結構。

實際上,除了 FFI 邊界之外,只有非常基本的協議處理才需要 unsafe 關鍵詞。在這種情況下,編寫一些通用的 unsafe 代碼很容易,這些代碼可以進行全面的單元測試,並可以在各種情況下使用,從而使代碼比 C ++ 更加安全。寫慣了 Rust 代碼後,你會發現寫 C ++ 更加令人崩潰,因為你不能依靠編譯器來確保記憶體安全。

除了確保安全性之外,Rust 擁有一套內部的編碼標準幫助新開發人員充分利用語言。錯誤處理、日誌記錄、鎖定和其他特定於語言的問題的最佳實踐將更快地獲得更高質量的代碼。

期望的功能和 Rust 社區

微軟工程師在部落格中表示,考慮到 Rust 相對較年輕,它仍然缺少一些非常適合微軟開發的語言特性。安全轉換、對 C 的安全支持、準確的分配以及對大規模單元測試的支持,是微軟龐大的代碼測試基礎設施所需要的。

Rust 在單片機和諸如內核和虛擬機監控程序等低級系統上有著光明的前景,在這些系統中,一旦成熟,該語言的安全性第一特性將使其具有相當大的吸引力。而目前,在單片機市場上,主要是英特爾在支持和推動,它正在努力使 Rust 達到與 C 相同的功能。

隨著 Facebook 使用 Rust 構建 Libra,微軟用 Rust 重寫 Windows 組件,Rust 的未來,似乎前途光明。

點個在看少個 bug

獲得更多的PTT最新消息
按讚加入粉絲團