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