高效又節(jié)能的 Rust 能幫助拯救地球嗎?(rustt)

高效又節(jié)能的 Rust 能幫助拯救地球嗎?(rustt)

這種編程語(yǔ)言安全又高效,但很難學(xué),會(huì)拖累生產(chǎn)力。

去年 12 月,在 AWS Re:invent 大會(huì)上,Rust 基金會(huì)主席 Shane Miller 和 Tokio 項(xiàng)目負(fù)責(zé)人 Carl Lerche 提出了使用 Rust 來(lái)盡可能減小人類對(duì)環(huán)境破壞的概念,但他們認(rèn)為 Rust 陡峭的學(xué)習(xí)曲線是通向這一目標(biāo)的道路上最大的障礙。

Miller 還是 AWS 的高級(jí)工程經(jīng)理,而 Lerche 是這家云巨頭的首席工程師。

Rust 為什么能拯救地球呢?答案是,更高效的代碼需要的運(yùn)行資源也會(huì)更少,這意味著數(shù)據(jù)中心消耗的能源會(huì)更少,而且制造計(jì)算設(shè)備并將其運(yùn)送到世界各地的過(guò)程中對(duì)環(huán)境的影響也會(huì)更低。

高效又節(jié)能的 Rust 能幫助拯救地球嗎?(rustt)

Shane Miller 和 Carl Lerche 在 AWS Re:invent 2021 上談?wù)?Rust 的效率和安全性

“數(shù)據(jù)中心消耗了……全球能源總量的 1%,”Miller 說(shuō)道。不過(guò)他補(bǔ)充說(shuō),由于技術(shù)進(jìn)步以及云計(jì)算行業(yè)傾向于減少閑置資源的比例等因素,過(guò)去 10 年來(lái)行業(yè)消耗的能源總量幾乎沒(méi)有變化。

他們論點(diǎn)的第二部分是說(shuō) Rust 是最高效的編程語(yǔ)言之一。他們引用的證據(jù)來(lái)源是 2017 年的一篇論文[PDF],這篇論文測(cè)量了 27 種編程語(yǔ)言的性能、內(nèi)存使用量和能源效率,并將 C 列為最高效的語(yǔ)言,而 Rust 緊隨其后,能源使用量?jī)H比 C 增加了 3%。根據(jù)這項(xiàng)研究,Java 使用的能量幾乎是 C 的兩倍,C#則是 C 的三倍以上,Python 則需要使用 75 倍以上的能量。

高效又節(jié)能的 Rust 能幫助拯救地球嗎?(rustt)

根據(jù) 2017 年的一項(xiàng)研究項(xiàng)目,按能源效率排名的語(yǔ)言

高效率的 Rust 語(yǔ)言

這項(xiàng)研究是有問(wèn)題的,正如這次會(huì)議上的一些人所觀察到的那樣:之所以會(huì)產(chǎn)生這樣的結(jié)果,不是因?yàn)橛行┱Z(yǔ)言不那么關(guān)心能源效率,而是因?yàn)榫幊陶Z(yǔ)言有許多實(shí)現(xiàn)和編譯器,其中一些是相對(duì)更高效的。這篇論文還測(cè)出來(lái) TypeScript 的效率只有 JavaScript 的十分之一,這也很奇怪,因?yàn)樗髅骺梢跃幾g為 JavaScript,并且兩種語(yǔ)言編寫的代碼差不多。

不過(guò)這些問(wèn)題并沒(méi)有那么重要,因?yàn)闆](méi)有人質(zhì)疑 Rust 作為一種系統(tǒng)語(yǔ)言的效率的確極為出色這個(gè)結(jié)論。 而且 Miller 和 Lerche 的論點(diǎn)并不僅僅依賴于這項(xiàng)研究。Miller 還引用了來(lái)自 Discord 和 Tenable 的案例研究,這些研究顯示了 Rust 帶來(lái)的顯著效率提升。

在 Tenable 案例中,開發(fā)人員用 Rust 重寫了一個(gè) JavaScript 組件,并實(shí)現(xiàn)了 50%的延遲改進(jìn)、75%的 CPU 使用率下降和 95%的內(nèi)存使用率下降。“這真是不可思議,”Miller 說(shuō)。“這可節(jié)約了不是一點(diǎn)半點(diǎn),而且不僅僅是在基礎(chǔ)設(shè)施方面節(jié)省了資源,它還意味著節(jié)約大量能源。”

Lerche 說(shuō),垃圾收集語(yǔ)言本質(zhì)上就是效率較低的。垃圾收集是自動(dòng)化內(nèi)存管理工作的常用方法,它的機(jī)制是識(shí)別超出范圍的對(duì)象并釋放它們的內(nèi)存。

“垃圾收集器必須暫停進(jìn)程以執(zhí)行垃圾收集操作。當(dāng)它暫停時(shí)……該服務(wù)無(wú)法再響應(yīng)請(qǐng)求,”他說(shuō)。這意味著 Java、C#和 JavaScript 等語(yǔ)言永遠(yuǎn)無(wú)法像 C 和 Rust 那樣兼具高效率和高性能。

為什么不直接使用 C 和 C 呢?原因在于安全性和與內(nèi)存相關(guān)的錯(cuò)誤上,Lerche 說(shuō),他還引用了一項(xiàng)研究,“C 和 C 軟件中所有高度嚴(yán)重的安全漏洞中有 70%是由于[缺乏]內(nèi)存安全性?!?/p>

他說(shuō),Rust 是革命性的,因?yàn)椤癛ust 是第一種在保持內(nèi)存安全性的同時(shí)具備高效率的主流編程語(yǔ)言。”Lerche 解釋了 Rust 如何通過(guò)所有權(quán)(ownership)的理念來(lái)實(shí)現(xiàn)內(nèi)存安全性,這種理念基于一個(gè)稱為仿射邏輯的概念,其中每個(gè)對(duì)象一次只有一個(gè)所有者(owner)。

所有權(quán)規(guī)則會(huì)在編譯時(shí)檢查,因此沒(méi)有運(yùn)行時(shí)開銷。并發(fā)在 Rust 中也比在 C 或 C 中更容易實(shí)現(xiàn)、更安全,從而進(jìn)一步提升了性能和效率。

看起來(lái)這個(gè)目標(biāo)很容易達(dá)成。開發(fā)人員和 IT 社區(qū)需要做的就是遷移到 Rust 即可,代碼將運(yùn)行得更快、更安全,地球的能源使用量會(huì)隨之下降,AWS 可以關(guān)閉他們一半的數(shù)據(jù)中心(盡管我們?cè)跁?huì)議期間沒(méi)有聽到最后這句話)。

Rust 很節(jié)能,但太難學(xué)導(dǎo)致流行不起來(lái)

“但是,”Miller 說(shuō),“如果我們要實(shí)現(xiàn)碳減排目標(biāo)……我們將需要使用 C 或 Rust 等節(jié)能語(yǔ)言編寫大多數(shù)新軟件。但是 Rust 確實(shí)有一個(gè)“臭名昭著”的學(xué)習(xí)曲線……我們看到了不少人在采用它,但我們并沒(méi)有看到它廣泛流行開來(lái)。

“我看到 Rust 使用率增長(zhǎng)最快的場(chǎng)景是通過(guò)使用 Rust 可以獲得顯著性能提升的場(chǎng)景,例如大容量的數(shù)據(jù)庫(kù)服務(wù)等等;在物聯(lián)網(wǎng)和嵌入式等資源受限的小型環(huán)境中也有很多人用 Rust。但在類似這樣的場(chǎng)景里:你正在寫一個(gè) JavaScript 應(yīng)用的后端——我們是很難看到類似的采用率的?!?/p>

問(wèn)題是在 Rust 中編程是很困難的。Java、JavaScript 和 Python 等語(yǔ)言被廣泛采用的原因之一是程序員可以更快地提高他們的工作效率。

這就是房間里的大象,“著名的學(xué)習(xí)曲線,”Miller 說(shuō)。在最近的一項(xiàng)調(diào)查中,“在表示不再使用該語(yǔ)言的工程師中,55%的受訪者將學(xué)習(xí)和生產(chǎn)力列為放棄該語(yǔ)言的原因。經(jīng)驗(yàn)豐富的工程師需要在主題專家的支持下進(jìn)行三到六個(gè)月的學(xué)習(xí),然后才能使用該語(yǔ)言進(jìn)行高效工作?!?/p>

有沒(méi)有可能撫平學(xué)習(xí)曲線呢?“學(xué)習(xí)曲線的部分問(wèn)題并不是說(shuō)語(yǔ)言有多難用,而是開發(fā)體驗(yàn)存在不足,因此我們看到來(lái)自 Java 等語(yǔ)言并嘗試使用 Rust 的工程師們說(shuō),他們對(duì)調(diào)試器的體驗(yàn)感到不舒服,”Miller 在回答我們的問(wèn)題時(shí)說(shuō)。“Rust 的性能分析工具與他們習(xí)慣使用的也不一樣。這就是我們正在調(diào)查的領(lǐng)域?!?/p>

“從歷史上看,Rust 是作為 C 的替代品出現(xiàn)的,”Lerche 補(bǔ)充道?!八哪繕?biāo)就是那個(gè)用例。但是我們發(fā)現(xiàn)在更高層次上還有很多應(yīng)用場(chǎng)景。

“如果你要構(gòu)建一個(gè)服務(wù),你得先看一遍 Rust 寫得非常詳細(xì)的手冊(cè),然后了解生命周期、trait 和 trait 模式,以及所有這些屬于這種語(yǔ)言一部分的概念,但這些概念和你要編寫的服務(wù)基本沒(méi)什么關(guān)系。”他說(shuō),Rust 項(xiàng)目有計(jì)劃編寫一套簡(jiǎn)化的文檔,其中只包含一些“編寫服務(wù)所需的知識(shí)”。

盡管這些舉措會(huì)有所幫助,但很難想象 Rust 真的會(huì)變得那么簡(jiǎn)單易用,簡(jiǎn)單到足夠讓業(yè)務(wù)應(yīng)用程序的開發(fā)人員能從 Java 或 JavaScript,或 C#或 Python 切換過(guò)來(lái)。畢竟他們還是有很多業(yè)務(wù)問(wèn)題需要解決,并且用其他那些語(yǔ)言來(lái)搞定會(huì)快得多。

進(jìn)一步說(shuō),在計(jì)算棧的底層,代碼可能會(huì)是用 Rust 或 C 或 C 編寫的,因?yàn)閷?duì)于 Linux 內(nèi)核或數(shù)據(jù)庫(kù)引擎的核心來(lái)說(shuō),高性能和效率已經(jīng)是一項(xiàng)要求了。

也就是說(shuō),Rust 要發(fā)揮作用的關(guān)鍵在于目標(biāo)環(huán)境的軟件低效率已經(jīng)顯著增加了客戶成本,并且 IT 行業(yè)非常關(guān)注這種低效率問(wèn)題才行,而且 Rust 也只是解決低效率問(wèn)題的一部分手段而已。

原文鏈接:https://www.theregister.com/2021/11/30/aws_reinvent_rust

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁(yè)
返回頂部