C++,微軟開始用Rust重寫Windows組件

揮別C/C++,微軟開始用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編譯器提供的內存和數據安全保證給了開發人員更大的信心,開發人員花在調試瑣碎問題上的事件更少了。

揮別C/C++,微軟開始用Rust重寫Windows組件

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代碼。

揮別C/C++,微軟開始用Rust重寫Windows組件

除了出色的文檔外,還有諸如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的未來,似乎前途光明。


分享到:


相關文章: