近年來Rust的存在感日漸升高,但是其陡峭的學習曲線似乎總是令人望而生畏。不過谷歌的一項內部調查表明,關于Rust的“難學”或許只是一種謠傳。
Rust到底難不難學?谷歌有了Go,為何還要支持Rust?頻頻陷入內斗的Rust領導團隊于近日徹底重組,這會為Rust發展帶來哪些變化?且看下文分解。
1、不難學,但新手勿入
谷歌的這項調查主要針對1000多名受雇于谷歌的軟件開發人員,其中約有13%的人有Rust經驗,但多數人還是來自C/C++、Python、Java、Go或Dart。結果顯示,Rust并不比其他編程語言更難學習。
Rust語言因其高性能以及C和C++等其他系統語言所缺乏的安全保證而受到推崇,但也經常聽人抱怨Rust學習門檻高,尤其是對于所有權等陌生概念的理解往往會耗費時間。
根據調查,對于開發人員來說,掌握Rust的三大挑戰是:宏、所有權和借用、異步編程。盡管如此,開發人員仍然很快掌握了這項語言。
如下圖所示,約有27%的被調查者有信心在2-3周內上手Rust,超2/3的受訪者表示用兩個月或更短時間就能為Rust代碼庫做出貢獻。此外,1/3的受訪者利用兩個月或更短的時間,使用Rust編寫代碼的效率就和其他語言一樣高。
圖源:googleblog
報告指出:“沒有任何數據表明Rust相對于任何其他語言有任何生產力損失。”
值得一提的是,開發人員普遍認為Rust代碼的質量很高。當問及他們是否認為Rust代碼的正確性高于用其他語言編寫的代碼時,超過85%的受訪者表現出了信心。
關于Rust的難學與否,國內外各大論壇都曾討論過相關話題。綜合來看,還是應了那句老話“難者不會,會者不難”。有人倒在了“入門階段”,認為其語法逆天、泯滅人性,也有人如下面這位有過C++經驗的網友所描述的,“學習成本不大”。
圖源:知乎
當然,對于編程新手或者沒有其他語言經驗的人來說,Rust肯定不會是首選。不過,對于有一定編程經驗的開發者來說,是否可以擯棄先入為主的觀念,愿意嘗試接納Rust的玩法,才是關鍵。畢竟,從來沒有完美而全能的語言,只有適合與否的語言。
2、為何科技巨頭力推Rust
根據Stack Overflow的年度開發人員調查,Rust已經連續數年坐鎮全球最受歡迎編程語言Top5。不止于開發者,諸多大型科技公司對于Rust也頗為青睞。
由于其內存安全性和多線程功能等,Rust正在大公司的技術堆棧中得到廣泛采用。谷歌、蘋果、微軟、Meta等都以某種形式采用了Rust。
- 谷歌使用Rust為Android編程,甚至開源了全面的Rust課程
- 蘋果在其許多項目中使用 Rust,包括機器人、AR/VR 工程、云工程和視頻工程
- 微軟是Rust的大力支持者,用它來減少Windows中內存安全問題的數量;
- Meta不僅加入了 Rust 基金會,還指定Rust為官方支持的服務器端編程語言之一
問題來了:為什么這些大型科技公司在投入資源開發自己的編程語言后又轉向Rust?
例如,由谷歌創建的Go在其產品中被廣泛使用。同樣,由蘋果開發的Swift也用于為iOS,MacOS等構建應用程序。Microsoft開發的C#也在內部推動,但所有這些公司之間的共同點是,盡管他們有自己的語言,但他們還是找到了對Rust的需求。
究其根本,Rust填補了擁有大型舊代碼庫的公司的一個非常重要的利基市場:現代低級編程語言。每種語言都有其獨一無二的個性,如果兩種語言都以或多或少相同的方式行動,那么我們就不會真的需要兩種不同的語言。
舉個例子,Go和Rust。這兩者都是流行的、現代的、廣泛使用的語言,但具體來說,兩者的編程方法和適用場景截然不同。資深軟件開發工程師Andrew Lader描述道:
“如果你希望有更好的開發效率,或是有非常多不同的服務需要實現,或者開發團隊較為龐大,Go是一個很好的選擇。Go提供了一流的并發能力,不允許不安全的內存訪問(Rust也是如此),也不會強迫你管理每一個細節。Go是高效且強大的,避免開發人員陷入困境,專注于簡單性和統一性。
另一方面,如果你需要榨干每一滴性能,那么你應該選擇Rust。與Go相比,Rust更像是C++的競爭對手。與C++同樣強大,還提供了許多令人愉快的改進。Rust使開發者能夠更細致地控制線程的其他行為、錯誤處理、變量生命周期!還有,Rust設計的目的之一是能夠與C互操作。Go也可以,但為了實現這個目標需要付出很多,這并不是Go的重點。”
由此可見,Go和Rust各有所長,因為他們針對的是完全不同的使用情況,至于到底選Go還是Rust,終究還是要看哪種語言更適合你和你的團隊的實際情況。
3、結束“抓馬”大亂斗,社區治理開始新故事
不管是在開發者群體中,還是在各大科技公司里,Rust正以不容忽視之姿呈現上升之勢,但今年以來,關于Rust的一些爭議新聞不時出現在公眾視野。
6月初,我們發布了 《果然,Rust還是分叉了!》一文,提到了Rust團隊內部的混亂治理,以及一些和技術無關的激烈“政治斗爭”事件。社區對Rust管理團隊這種無休止的“混亂無序”狀態感到擔憂,認為這會損害Rust語言的聲譽和發展。
種種治理弊端的暴露促使Rust團隊內部也開始了整頓。不久前,他們宣布對組織結構進行重大調整。
此前,Rust項目創建了包括core、language、mod、library和cargo在內的若干團隊。其中核心(core)團隊主要負責監督其他Rust團隊出現的問題。但時移世易,由于核心團隊擁有對Rust語言動態的最高決策權,又不受其他團隊監督,就導致事態走向了失序。
調整后,此前“抓馬”不斷的Rust核心團隊被移除,臨時領導者地位徹底終結。取而代之的是,Rust項目的每個頂級團隊選派一名代表,共同組成Rust領導委員會(Rust Leadership Council),負責頂級治理問題。
“我們希望在成功的基礎上再接再厲,在失敗的基礎上加以改進,最終導致更大的透明度和問責制。”Rust領導委員會如是表態。如何提高Rust領導層的透明度,償還可能的“治理債務”才是今后工作的重點。
而Rust項目的大部分發展和維護工作,如編譯器和核心工具的維護、基礎設施的管理等,仍由九個頂級團隊負責。這九個團隊涵蓋以下內容:編譯器、crates.io、開發工具、基礎結構、語言、啟動板、庫、審核和發布。
有趣的是,回溯過往,可以發現,Rust之所以會陷入治理危機與其發展歷程息息相關。Rust語言最初只是Mozilla員工Graydon Hoare 在2006年創建的一個業余項目,直到在2021年2月,Rust被移交給獨立的Rust基金會,這門語言才真正開始起飛。也正因為如此,Rust從誕生之初就缺乏一位標志性的技術權威的領導。
與之形成鮮明差異的是Python。Guido van Rossum不僅是Python的創始人,還被冠以“終身仁慈獨裁者”(Benevolent Dictator For Life-BDFL)稱號(龜叔在2018年時宣布不再出任BDFL)。對于一門語言而言,社區出現爭議時擁有最終決定權的是誰,很大程度上會決定其生態發展的最終導向。
參考鏈接:
https://analyticsindiamag.com/why-big-techs-are-pushing-rust/
https://www.infoworld.com/article/3701230/rust-language-project-revamps-governance.html