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