高效又節(jié)能的 Rust 能幫助拯救地球嗎?(rust)
這種編程語言安全又高效,但很難學(xué),會拖累生產(chǎn)力。
去年 12 月,在 AWS Re:invent 大會上,Rust 基金會主席 Shane Miller 和 Tokio 項(xiàng)目負(fù)責(zé)人 Carl Lerche 提出了使用 Rust 來盡可能減小人類對環(huán)境破壞的概念,但他們認(rèn)為 Rust 陡峭的學(xué)習(xí)曲線是通向這一目標(biāo)的道路上最大的障礙。
Miller 還是 AWS 的高級工程經(jīng)理,而 Lerche 是這家云巨頭的首席工程師。
Rust 為什么能拯救地球呢?答案是,更高效的代碼需要的運(yùn)行資源也會更少,這意味著數(shù)據(jù)中心消耗的能源會更少,而且制造計(jì)算設(shè)備并將其運(yùn)送到世界各地的過程中對環(huán)境的影響也會更低。
Shane Miller 和 Carl Lerche 在 AWS Re:invent 2021 上談?wù)?Rust 的效率和安全性
“數(shù)據(jù)中心消耗了……全球能源總量的 1%,”Miller 說道。不過他補(bǔ)充說,由于技術(shù)進(jìn)步以及云計(jì)算行業(yè)傾向于減少閑置資源的比例等因素,過去 10 年來行業(yè)消耗的能源總量幾乎沒有變化。
他們論點(diǎn)的第二部分是說 Rust 是最高效的編程語言之一。他們引用的證據(jù)來源是 2017 年的一篇論文[PDF],這篇論文測量了 27 種編程語言的性能、內(nèi)存使用量和能源效率,并將 C 列為最高效的語言,而 Rust 緊隨其后,能源使用量僅比 C 增加了 3%。根據(jù)這項(xiàng)研究,Java 使用的能量幾乎是 C 的兩倍,C#則是 C 的三倍以上,Python 則需要使用 75 倍以上的能量。
根據(jù) 2017 年的一項(xiàng)研究項(xiàng)目,按能源效率排名的語言
高效率的 Rust 語言
這項(xiàng)研究是有問題的,正如這次會議上的一些人所觀察到的那樣:之所以會產(chǎn)生這樣的結(jié)果,不是因?yàn)橛行┱Z言不那么關(guān)心能源效率,而是因?yàn)榫幊陶Z言有許多實(shí)現(xiàn)和編譯器,其中一些是相對更高效的。這篇論文還測出來 TypeScript 的效率只有 JavaScript 的十分之一,這也很奇怪,因?yàn)樗髅骺梢跃幾g為 JavaScript,并且兩種語言編寫的代碼差不多。
不過這些問題并沒有那么重要,因?yàn)闆]有人質(zhì)疑 Rust 作為一種系統(tǒng)語言的效率的確極為出色這個(gè)結(jié)論。 而且 Miller 和 Lerche 的論點(diǎn)并不僅僅依賴于這項(xiàng)研究。Miller 還引用了來自 Discord 和 Tenable 的案例研究,這些研究顯示了 Rust 帶來的顯著效率提升。
在 Tenable 案例中,開發(fā)人員用 Rust 重寫了一個(gè) JavaScript 組件,并實(shí)現(xiàn)了 50%的延遲改進(jìn)、75%的 CPU 使用率下降和 95%的內(nèi)存使用率下降?!斑@真是不可思議,”Miller 說。“這可節(jié)約了不是一點(diǎn)半點(diǎn),而且不僅僅是在基礎(chǔ)設(shè)施方面節(jié)省了資源,它還意味著節(jié)約大量能源?!?/p>
Lerche 說,垃圾收集語言本質(zhì)上就是效率較低的。垃圾收集是自動化內(nèi)存管理工作的常用方法,它的機(jī)制是識別超出范圍的對象并釋放它們的內(nèi)存。
“垃圾收集器必須暫停進(jìn)程以執(zhí)行垃圾收集操作。當(dāng)它暫停時(shí)……該服務(wù)無法再響應(yīng)請求,”他說。這意味著 Java、C#和 JavaScript 等語言永遠(yuǎn)無法像 C 和 Rust 那樣兼具高效率和高性能。
為什么不直接使用 C 和 C 呢?原因在于安全性和與內(nèi)存相關(guān)的錯(cuò)誤上,Lerche 說,他還引用了一項(xiàng)研究,“C 和 C 軟件中所有高度嚴(yán)重的安全漏洞中有 70%是由于[缺乏]內(nèi)存安全性?!?/p>
他說,Rust 是革命性的,因?yàn)椤癛ust 是第一種在保持內(nèi)存安全性的同時(shí)具備高效率的主流編程語言?!盠erche 解釋了 Rust 如何通過所有權(quán)(ownership)的理念來實(shí)現(xiàn)內(nèi)存安全性,這種理念基于一個(gè)稱為仿射邏輯的概念,其中每個(gè)對象一次只有一個(gè)所有者(owner)。
所有權(quán)規(guī)則會在編譯時(shí)檢查,因此沒有運(yùn)行時(shí)開銷。并發(fā)在 Rust 中也比在 C 或 C 中更容易實(shí)現(xiàn)、更安全,從而進(jìn)一步提升了性能和效率。
看起來這個(gè)目標(biāo)很容易達(dá)成。開發(fā)人員和 IT 社區(qū)需要做的就是遷移到 Rust 即可,代碼將運(yùn)行得更快、更安全,地球的能源使用量會隨之下降,AWS 可以關(guān)閉他們一半的數(shù)據(jù)中心(盡管我們在會議期間沒有聽到最后這句話)。
Rust 很節(jié)能,但太難學(xué)導(dǎo)致流行不起來
“但是,”Miller 說,“如果我們要實(shí)現(xiàn)碳減排目標(biāo)……我們將需要使用 C 或 Rust 等節(jié)能語言編寫大多數(shù)新軟件。但是 Rust 確實(shí)有一個(gè)“臭名昭著”的學(xué)習(xí)曲線……我們看到了不少人在采用它,但我們并沒有看到它廣泛流行開來。
“我看到 Rust 使用率增長最快的場景是通過使用 Rust 可以獲得顯著性能提升的場景,例如大容量的數(shù)據(jù)庫服務(wù)等等;在物聯(lián)網(wǎng)和嵌入式等資源受限的小型環(huán)境中也有很多人用 Rust。但在類似這樣的場景里:你正在寫一個(gè) JavaScript 應(yīng)用的后端——我們是很難看到類似的采用率的。”
問題是在 Rust 中編程是很困難的。Java、JavaScript 和 Python 等語言被廣泛采用的原因之一是程序員可以更快地提高他們的工作效率。
這就是房間里的大象,“著名的學(xué)習(xí)曲線,”Miller 說。在最近的一項(xiàng)調(diào)查中,“在表示不再使用該語言的工程師中,55%的受訪者將學(xué)習(xí)和生產(chǎn)力列為放棄該語言的原因。經(jīng)驗(yàn)豐富的工程師需要在主題專家的支持下進(jìn)行三到六個(gè)月的學(xué)習(xí),然后才能使用該語言進(jìn)行高效工作。”
有沒有可能撫平學(xué)習(xí)曲線呢?“學(xué)習(xí)曲線的部分問題并不是說語言有多難用,而是開發(fā)體驗(yàn)存在不足,因此我們看到來自 Java 等語言并嘗試使用 Rust 的工程師們說,他們對調(diào)試器的體驗(yàn)感到不舒服,”Miller 在回答我們的問題時(shí)說。“Rust 的性能分析工具與他們習(xí)慣使用的也不一樣。這就是我們正在調(diào)查的領(lǐng)域?!?/p>
“從歷史上看,Rust 是作為 C 的替代品出現(xiàn)的,”Lerche 補(bǔ)充道。“它的目標(biāo)就是那個(gè)用例。但是我們發(fā)現(xiàn)在更高層次上還有很多應(yīng)用場景。
“如果你要構(gòu)建一個(gè)服務(wù),你得先看一遍 Rust 寫得非常詳細(xì)的手冊,然后了解生命周期、trait 和 trait 模式,以及所有這些屬于這種語言一部分的概念,但這些概念和你要編寫的服務(wù)基本沒什么關(guān)系?!彼f,Rust 項(xiàng)目有計(jì)劃編寫一套簡化的文檔,其中只包含一些“編寫服務(wù)所需的知識”。
盡管這些舉措會有所幫助,但很難想象 Rust 真的會變得那么簡單易用,簡單到足夠讓業(yè)務(wù)應(yīng)用程序的開發(fā)人員能從 Java 或 JavaScript,或 C#或 Python 切換過來。畢竟他們還是有很多業(yè)務(wù)問題需要解決,并且用其他那些語言來搞定會快得多。
進(jìn)一步說,在計(jì)算棧的底層,代碼可能會是用 Rust 或 C 或 C 編寫的,因?yàn)閷τ?Linux 內(nèi)核或數(shù)據(jù)庫引擎的核心來說,高性能和效率已經(jīng)是一項(xiàng)要求了。
也就是說,Rust 要發(fā)揮作用的關(guān)鍵在于目標(biāo)環(huán)境的軟件低效率已經(jīng)顯著增加了客戶成本,并且 IT 行業(yè)非常關(guān)注這種低效率問題才行,而且 Rust 也只是解決低效率問題的一部分手段而已。
原文鏈接:https://www.theregister.com/2021/11/30/aws_reinvent_rust