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