撰稿丨千山
審校 | 云昭
51CTO讀者成長計(jì)劃社群招募,咨詢小助手(微信號:CTOjishuzhan)
微軟正在用 Rust 編程語言重寫核心 Windows 庫。
在以色列特拉維夫舉辦的 BlueHat IL 2023 上,Windows 操作系統(tǒng)安全總監(jiān) David “dwizzle” Weston 宣布 Rust 進(jìn)入操作系統(tǒng)內(nèi)核。
“實(shí)際上,在接下來的幾周或幾個月內(nèi),你將在內(nèi)核中使用 Rust 啟動 Windows,這真的很酷,”他說。“這里的基本目標(biāo)是將其中一些內(nèi)部 C++ 數(shù)據(jù)類型轉(zhuǎn)換為它們的 Rust 等價物。”
1、微軟:有“分寸”地?fù)肀?Rust
微軟的這一舉措并非一時興起,早在幾年前,微軟就表現(xiàn)出了擁抱 Rust 的意向。
在微軟看來,這門語言是一種在代碼落入用戶手中之前捕獲和消除內(nèi)存安全漏洞的方法。簡單來說,Rust 專注于內(nèi)存安全和類似的保護(hù),這減少了結(jié)果代碼中不良錯誤的數(shù)量。
Windows 的 Rust 改造始于 2020 年,由 DWriteCore 開始。DWriteCore 是 Windows 的 DWrite 引擎的 Windows App SDK 實(shí)現(xiàn),用于文本分析、布局和渲染。DWriteCore 現(xiàn)在由大約 152000 行 Rust 代碼和大約 96000 行 C++ 代碼組成。
隨著行業(yè)對內(nèi)存安全編程的支持越來越多,微軟對 Rust 的探索變得更加熱情。
Microsoft Windows 圖形設(shè)備接口 (Win32 GDI) 正在移植到 Rust 上,到目前為止已包含 36000 行 Rust 代碼。最新版本的 Windows 11 使用 Rust 版本啟動,該版本通過了所有 GDI 測試,但 Rust 端口目前在功能標(biāo)志后面被禁用。另據(jù) Weston 透露,Windows 內(nèi)核中現(xiàn)在有一個 SysCall,是采用 Rust 實(shí)現(xiàn)的。
當(dāng)然,微軟對 Rust 的這種擁抱還是有限度的。正如 Weston 所說,“在 Rust 中重寫 Windows 可能不會很快發(fā)生。雖然我們喜歡 Rust,但我們需要一種策略,包括保護(hù)更多的原生代碼。”
2、社區(qū):來自巨頭的支持不可或缺
盡管來自微軟的支持是有限的,但其代碼貢獻(xiàn)也將使 Rust 更有活力,這對于整個開源社區(qū)的發(fā)展是積極向上的。
Python Web 框架 Flask 的作者 Armin Ronacher 在一封電子郵件中表示,微軟對 Rust 的承諾對這門語言來說非常棒。
“特別是,因?yàn)槲蚁M④浿赜矛F(xiàn)有的編譯器,我希望這樣做將帶來更好的 PDB(程序數(shù)據(jù)庫)支持,”他說。“今天在 Windows 上,開發(fā)人員工具支持落后于基于 DWARF 的‘使用屬性記錄格式進(jìn)行調(diào)試’平臺支持。”
Pydantic 的創(chuàng)始人 Samuel Colvin 則在接受外媒采訪時表示:“微軟的這種前瞻性思維給我留下了深刻的印象……如果你現(xiàn)在正在構(gòu)建一個性能關(guān)鍵或低級別的應(yīng)用程序,那么 Rust 在這一點(diǎn)上是不費(fèi)吹灰之力的?!?/p>
同時,他認(rèn)為,找到優(yōu)秀的 Rust 工程師比找到優(yōu)秀的 C/C++ 工程師更容易。雖然擁有豐富 Rust 經(jīng)驗(yàn)的人較少,但有很多工程師有興趣嘗試學(xué)習(xí)這門語言。而且編寫安全代碼的難度很大,在 Rust 中要容易一個數(shù)量級。
“對于我們這些依賴 Rust 的人來說,微軟正在使用它,并希望能夠支持它,這真的很令人興奮?!?/p>
3、名聲漸起但紛爭不斷
近年來,Rust 輿論聲量日益漸漲,在火了的同時發(fā)展也漸趨穩(wěn)定。
在 Tiobe 發(fā)布的四月編程語言排行榜中,Rust 進(jìn)入了前 20 名,盡管差不多是守門員的位置(位列 19),但也可以窺見其發(fā)展態(tài)勢。
圖源:TIOBE Index - TIOBE
或許可以歸因于之前 Linux 內(nèi)核 6.1 版正式采用了 Rust,為使用 Rust 編寫驅(qū)動程序掃清了一部分障礙。不過日前 Rust 基金會關(guān)于商標(biāo)政策的迷之操作一度引發(fā)社區(qū)爭議,“平穩(wěn)發(fā)展中又暗流涌動”或許可以概括 Rust 的現(xiàn)狀。
而且隨著 Rust 逐漸冒頭,C++ 與 Rust 之間也是硝煙彌漫。
去年微軟 Azure 的首席技術(shù)官 Mark Russinovich 公開表示,開發(fā)人員應(yīng)該避免在新項(xiàng)目中使用 C 或 C++,而是使用 Rust,因?yàn)樗哂袃?nèi)存安全優(yōu)勢,甚至敦促業(yè)界宣布棄用這些語言。
隨后 C++ 之父 Bjarne Stroustrup 在接受采訪時隔空回懟:“新語言通常需要多年時間和重大努力才能在其廣泛的應(yīng)用領(lǐng)域與成熟語言相匹配。愛好者很少看到這一點(diǎn),并且他們的評論往往是片面的?!?/p>
值得一提的是,C++ 在年初時被 Tiobe 評為 2022 年度最佳編程語言。當(dāng)時 Tiobe 首席執(zhí)行官 Paul Jensen 如此評價:“C++ 流行的原因是它作為一種高級面向?qū)ο笳Z言的出色性能。因此,可以用 C++ 開發(fā)快速而龐大的軟件系統(tǒng)(超過數(shù)百萬行代碼),而不大會出現(xiàn)‘維護(hù)噩夢’。”
雖然雙方各執(zhí)一詞,但就現(xiàn)狀來看,Rust 還無法撼動 C++ 的地位。相較 C++ 的歷史沉淀,Rust 的流行明顯還需時日。而且 Rust 陡峭的學(xué)習(xí)曲線也限制了其快速的規(guī)模化普及。曾有開發(fā)者感慨:“試圖用 Rust 重寫公司核心組件,學(xué)習(xí)曲線是真的陡,Java 用了一周上手,Rust 用了一個月才玩明白?!?/p>
4、從小眾走向大眾尚需時日
除了新手不友好外,關(guān)于 Rust 在長時間內(nèi)“叫好不叫座”的原因,近日,前 Deepin CTO 王勇也在推特上分享了自己的觀點(diǎn):Rust 語言很有力量,但他對這個語言并不感冒。原因如下:
1、世界上有很多業(yè)務(wù)性的邏輯是需要創(chuàng)造力和編程心流體驗(yàn)的,而 Rust 編譯器總是打斷你方向性的思考, 強(qiáng)制讓你關(guān)注設(shè)計(jì)階段不重要的細(xì)節(jié),喪失了很多編程樂趣。
圖源:推特
2、Rust 社區(qū)的人似乎不懂得市場經(jīng)濟(jì)和成本概念,一個好的軟件不僅僅只是內(nèi)存安全和絕對性能,代碼可讀性,場景適合性,認(rèn)知深刻和持續(xù)維護(hù)的軟件對用戶才有價值,重寫完一個軟件,證明 Rust 比別的語言快和自己厲害,馬上就棄坑的軟件沒有價值。
3、Rust 社區(qū)推崇內(nèi)存的細(xì)膩控制,有時候就和 C++ 的開發(fā)人員一樣討厭,把指針或者生命周期控制能力當(dāng)作比較的炫耀資本,Rust 更像是一種證明自己比別人厲害的工具。我不是說 Rust 不好,而是不喜歡這種認(rèn)為 Rust 就是天下第一的思想,什么都要用 Rust 重寫的想法。
4、Rust 的強(qiáng)制內(nèi)存管理,在編寫復(fù)雜邏輯的時候,編譯器打斷太生硬了,導(dǎo)致人無法安靜的思考最重要的架構(gòu)設(shè)計(jì)。Rust 對于底層庫或者實(shí)時性這些不需要 GC 或者性能苛刻的場景很適合,為了內(nèi)存安全可以忍受編譯器嚴(yán)格。但是現(xiàn)實(shí)大部分場景不是都是內(nèi)存安全優(yōu)先的,而是創(chuàng)造力和邏輯清晰優(yōu)先的。
最后王勇強(qiáng)調(diào),無論學(xué)習(xí)何種語言,掌握多少種語言,都是為了學(xué)習(xí)各種語言的設(shè)計(jì)思想和看問題角度,主要價值在于提升認(rèn)知。而不是為了在編程語言之爭中踩在制高點(diǎn)抒發(fā)優(yōu)越感?!?nbsp;語言只是工具,我們不能拿著錘子到處去攻擊別人炫耀自己,那樣其實(shí)很傻?!?/p>
參考鏈接:
https://www.theregister.com/2023/04/27/microsoft_windows_rust/
https://www.tiobe.com/tiobe-index/