自 2015 年正式對外發(fā)布,這些年來 Rust 一方面頗受大廠喜愛,另一方面有關(guān)它的傳言也愈演愈烈。對此,近日 谷歌基于其內(nèi)部使用 Rust 的體驗和經(jīng)歷,對這些謠言進(jìn)行了一一澄清。
原文鏈接:https://opensource.googleblog.com/2023/06/rust-fact-vs-fiction-5-insights-from-googles-rust-journey-2022.html
作者 | Lars Bergstrom、Kathy Brennan
譯者 | 彎月 責(zé)編 | 夏萌
出品 | CSDN(ID:CSDNnews)
2015 年,Rust 1.0 版正式發(fā)布,這是一種相對較新的編程語言,具有很多功能。關(guān)注 Rust 提供的性能和安全保證的開發(fā)人員可能很想知道是否可以僅使用 Rust 來代替他們之前使用的所有語言。如果大公司嘗試在現(xiàn)有環(huán)境中使用 Rust 結(jié)果會怎樣?開發(fā)人員學(xué)習(xí)該語言需要多長時間?學(xué)習(xí) Rust 語言會有很大的收獲嗎?
在本文中,我們將分析 Google 多年來采用 Rust 的一些數(shù)據(jù)。在 Google,我們看到 Rust 的采用率不斷增加,特別是在消費(fèi)者應(yīng)用程序和平臺中。我們開展了一項調(diào)查,對象為 2022 年在部分工作中編寫并提交了 Rust 代碼的 1,000 多名 Google 開發(fā)人員,在此我們打算正面回應(yīng)一些傳言,其中包括一些可以改進(jìn)的問題,同時也希望分享一些我們這段時間的發(fā)現(xiàn)。
我們要特別感謝我們的主要培訓(xùn)合作商之一 Ferrous Systems 在我們開始采用 Rust 之際給予的幫助。我們還想重點介紹一些免費(fèi)自學(xué)的新材料:Comprehensive Rust (https://google.Github.io/comprehensive-rust/),這是我們和社區(qū)在過去幾個季度中一起努力的成果。
傳言 1:Rust 的學(xué)習(xí)需要 6 個多月——假的!
所有調(diào)查參與者都是 Google 的專業(yè)軟件開發(fā)人員(或相關(guān)領(lǐng)域)。雖然其中一些人有 Rust 經(jīng)驗(約 13%),但大多數(shù)人來自 C/C++、Python/ target=_blank class=infotextkey>Python、JAVA、Go 或 Dart。
根據(jù)我們的研究,超過 2/3 的受訪者有信心只需兩個月或更短時間就可以為 Rust 代碼庫做出貢獻(xiàn)。此外,三分之一的受訪者只用了兩個月或更短的時間,使用 Rust 編寫代碼的效率就可以與其他語言一樣高。學(xué)習(xí)時間延長到四個月,這一數(shù)字就可以增加到 50% 以上。有趣的是,無論 Google 內(nèi)外,這些數(shù)字的增長與我們看到的開發(fā)人員采用其他語言都一樣。
總的來說,我們沒有看到任何數(shù)據(jù)表明相對于這些開發(fā)人員之前在 Google 使用的任何其他語言使用 Rust 會導(dǎo)致生產(chǎn)力下降。參加了 Comprehensive Rust 課程的學(xué)生給出的反饋也很一致:第二天和第三天提出的問題表明,經(jīng)驗豐富的軟件開發(fā)人員可以在很短的時間內(nèi)熟悉 Rust。
傳言 2:Rust 編譯器的速度達(dá)不到人們的想象——真的!
就目前的情況來看,開發(fā)人員使用 Rust 時遇到的第一大挑戰(zhàn)是構(gòu)建速度慢,只有略多于 40% 的受訪者認(rèn)為這個速度可以接受。
社區(qū)范圍內(nèi)已經(jīng)做出了巨大的努力來改進(jìn)和跟蹤 rustc 的性能。這得到了志愿者和幾家公司(包括 Google)的支持,我們很高興看到一些核心的開發(fā)人員也加入了這項工作,但很明顯我們需要繼續(xù)努力,甚至投入額外的支持。
傳言 3:不安全的代碼和互操作始終是最大的挑戰(zhàn)——假的!
目前,對于 Google 開發(fā)人員來說,Rust 面臨的三大挑戰(zhàn)領(lǐng)域是:
- 宏
- 所有權(quán)和借用
- 異步編程
編寫不安全的代碼,處理 C/C++ 互操作是 Google 開發(fā)人員常見的問題,但并不是最大的挑戰(zhàn)。Rust 語言設(shè)計團(tuán)隊一直在上述三個領(lǐng)域努力,希望壓平整體的學(xué)習(xí)曲線,并持續(xù)提升,而我們的內(nèi)部調(diào)查結(jié)果與這些投資領(lǐng)域非常一致。
傳言 4:Rust 的編譯器錯誤消息質(zhì)量非常高 ——真的!
經(jīng)常有人提到 Rust 的編譯器領(lǐng)提供的錯誤消息非常實用,這在本次調(diào)查中也得到了證實。只有 9% 的受訪者對 Rust 中的診斷和調(diào)試信息的質(zhì)量不滿意。Comprehensive Rust 參與者的反饋也大致相同:人們對編譯器的消息感到驚訝。起初,人們感到很驚喜,因為他們習(xí)慣于忽略編譯器的錯誤,但習(xí)慣之后,就會非常喜歡。
以下示例來自 Google 內(nèi)部員工為實踐 Rust 所做的練習(xí)——用 Rust 解決 Advent of Code 2021(https://adventofcode.com/2021)。
在第 5 天的練習(xí)中,我們需要搜索表中的條目。下面的錯誤信息不僅檢測到結(jié)果的模式匹配漏掉了一種情況,而且還提出了修復(fù)建議。
在第 11 天的練習(xí)中,我們需要檢查某個元素是否在 grid 的范圍內(nèi)。下面的 Rust 警告檢測到由于類型為無符號而導(dǎo)致冗余比較,并標(biāo)明了可以刪除的代碼。
傳言 5:Rust 代碼質(zhì)量很高——真的!
受訪者表示 Rust 代碼的質(zhì)量很高:77% 的開發(fā)者對 Rust 代碼的質(zhì)量感到滿意。事實上,當(dāng)問及他們是否認(rèn)為 Rust 代碼的正確性高于用其他語言編寫的代碼時,超過 85% 的受訪者相信他們的 Rust 代碼是正確的。
Rust 代碼不僅正確,而且易于審查。超過一半的受訪者表示 Rust 代碼非常容易審查。作為一名工程經(jīng)理,在我看來,從很多方面來說這個結(jié)果與編寫代碼的結(jié)果同等重要,因為代碼審查與編寫代碼都是專業(yè)軟件工程師日常工作的重要組成部分。
正如 Google 開發(fā)人員和其他人所指出的那樣,開發(fā)人員的滿意度和生產(chǎn)力與代碼質(zhì)量以及審查代碼所需的時間息息相關(guān)。如果說 Rust 不僅更適合編寫高質(zhì)量代碼,而且讓代碼運(yùn)行起來也更容易,那么對于正在評估和考慮采用這門語言的公司來說,這甚至是超越性能和內(nèi)存安全性的一系列非常令人信服的理由。
展望未來
雖然 1000 多名開發(fā)人員是一個不小的基數(shù),但我們期待著進(jìn)一步的采用和未來的調(diào)查,其中也包括更多的用例。此外,雖然許多接受調(diào)查的開發(fā)人員加入了沒有 Rust 經(jīng)驗的團(tuán)隊,但這些人中有一些是我們從更廣泛的調(diào)查中看到的更興奮的早期采用者。請繼續(xù)關(guān)注來年更新的調(diào)查結(jié)果!