編譯丨諾亞
出品 | 51CTO技術(shù)棧(微信號:blog51cto)
谷歌的工程總監(jiān)Lars Bergstrom在倫敦的Rust Nation UK大會上分享了谷歌將Go或C++編寫的項目遷移到Rust語言的經(jīng)驗。
他表示,使用Rust的開發(fā)團(tuán)隊相比于使用C++的團(tuán)隊,在工作效率上大約高出兩倍。
早在2016年Dropbox和2018年Figma就已經(jīng)開始嘗試用Rust重寫代碼以確保內(nèi)存安全,但當(dāng)時業(yè)界對于Rust在生產(chǎn)力和語言可靠性方面的疑慮并未完全消除。
然而隨著時間推移,尤其是在軟件安全性日益成為國家基礎(chǔ)設(shè)施關(guān)鍵問題的大背景下,非內(nèi)存安全語言帶來的挑戰(zhàn)引起了更廣泛的認(rèn)識轉(zhuǎn)變。美國和其他國家政府機(jī)構(gòu)也強(qiáng)調(diào)了軟件中內(nèi)存安全的重要性。
微軟Azure首席技術(shù)官M(fèi)ark Russinovich在2022年9月提出,原本可能選擇C/C++進(jìn)行開發(fā)的軟件項目應(yīng)考慮改用Rust,這一建議不僅適用于新項目,還擴(kuò)展到對舊的、非內(nèi)存安全語言編寫的代碼進(jìn)行重構(gòu)的需求。
今年早些時候,微軟甚至發(fā)出了求助呼吁,希望開發(fā)者協(xié)助將自家的C#代碼移植至Rust,并且互聯(lián)網(wǎng)安全研究組(ISRG)的Prossimo項目正在將一些核心開源組件,如NTP、DNS、TLS等重要庫重寫為Rust版本,旨在提高內(nèi)存安全性。
盡管C++之父Bjarne Stroustrup以及其他人士對此有所抵觸,Stroustrup在回應(yīng)2022年11月NSA關(guān)于內(nèi)存安全的備忘錄時指出,通過合適的工具,C++也能在較低成本下達(dá)到與Rust相當(dāng)?shù)膬?nèi)存安全保證。
然而,像谷歌這樣的Rust實踐者提供的反例則顯示,堅持使用現(xiàn)有C++基礎(chǔ)設(shè)施的成本優(yōu)勢可能并不成立。
谷歌內(nèi)部將Go代碼轉(zhuǎn)換為Rust的過程中,發(fā)現(xiàn)重構(gòu)后的項目開發(fā)所需的時間和人力并沒有增加,反而顯示出諸多優(yōu)點(diǎn)。
Bergstrom提到,將Go代碼重寫為Rust時,同等規(guī)模的團(tuán)隊可以在相同時間內(nèi)完成工作,這意味著從Go轉(zhuǎn)向Rust并不會導(dǎo)致生產(chǎn)力下降;相反,他們觀察到了Rust代碼帶來的好處,比如服務(wù)內(nèi)存使用量減少以及隨著時間推移,用Rust重寫的服務(wù)缺陷率逐漸降低,從而提高了程序正確性。
更重要的是,相較于C++代碼轉(zhuǎn)為Rust的情況,Rust開發(fā)者的生產(chǎn)效率優(yōu)勢更為明顯。
此外,各方觀點(diǎn)也指出,雖然內(nèi)存安全性是軟件安全的重要組成部分,但并非所有安全問題都能歸結(jié)于內(nèi)存安全。
卡內(nèi)基梅隆大學(xué)軟件工程研究所等機(jī)構(gòu)強(qiáng)調(diào),所有編程語言都有其權(quán)衡之處,選擇何種語言應(yīng)取決于它是否適合特定應(yīng)用場景。
某些情況下,強(qiáng)調(diào)內(nèi)存安全的語言可能會犧牲性能和時間要求,而且無論選用哪種語言,開發(fā)者都必須掌握正確的語法、語義、結(jié)構(gòu)、習(xí)慣用法及工具,否則可能會出現(xiàn)其他類型的漏洞或缺陷。
盡管如此,Rust通過避免內(nèi)存相關(guān)的安全隱患,在許多場景下被視為提升軟件安全性的有效手段之一。