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