發(fā)布于:2021-01-07 10:27:24
0
2700
0
2020年開發(fā)人員調(diào)查的結(jié)果再次出現(xiàn),在參與的65,000名程序員中,Rust再次成為最受歡迎的語(yǔ)言。自2016年以來(lái),Rust一直排名第一,表明使用它的開發(fā)人員都喜歡它。表示目前正在使用Rust的調(diào)查受訪者中有86.1%希望明年繼續(xù)使用它。這是Rust連續(xù)第五年榮登榜首,因此我們認(rèn)為它必須有一些特別之處。
幾個(gè)月前,我們請(qǐng)Stack Overflow的主要Rust貢獻(xiàn)者Jake Goulding(又名Shepmaster)來(lái)解釋使用Rust的編碼人員如何使Rust如此受歡迎。這是他不得不說的一個(gè)例子:“簡(jiǎn)短的回答是,Rust解決了許多其他語(yǔ)言中存在的痛點(diǎn),這為有限的缺點(diǎn)方面邁出了堅(jiān)實(shí)的一步?!闭恼轮档靡蛔x,因?yàn)樗w了Rust對(duì)于來(lái)自其他語(yǔ)言的編碼人員的好處(以及痛點(diǎn))。但是,就像杰克一樣雄辯而有說服力,我們希望聽到更多用戶的來(lái)信。因此,我在Rust聊天室和Rust論壇上發(fā)表了評(píng)論。 Rust用戶是一群熱情的人,我得到了一些有趣的見解以及一些友好的辯論。事不宜遲,這就是Rust如此之多的原因,直接來(lái)自Rustaceans本身(包括Rust核心團(tuán)隊(duì)的兩名成員)。
真正新穎且經(jīng)過深思熟慮的功能
雖然某些語(yǔ)言只是增加和簡(jiǎn)化了現(xiàn)有的概念,但一些用戶認(rèn)為Rust實(shí)際上是在用編程語(yǔ)言來(lái)做新的事情。而且它并不是為了炫耀而做新的事情。他們認(rèn)為這些設(shè)計(jì)選擇解決了現(xiàn)代編程中的難題。
ZiCog:“鐵銹是十二年來(lái)我唯一的一種專業(yè)使用的語(yǔ)言,實(shí)際上它引入了真正的新功能。也就是說,在沒有垃圾回收或復(fù)雜的運(yùn)行時(shí)系統(tǒng)的情況下,使用經(jīng)過編譯的,真實(shí)的系統(tǒng)編程語(yǔ)言來(lái)保證內(nèi)存使用的整個(gè)安全性?!?/span>
DenysSéguret:“當(dāng)我們發(fā)現(xiàn)一個(gè)非常強(qiáng)大的功能(例如在env變量的偽裝下讀取一個(gè)編譯上下文元素)可以如此優(yōu)雅地完成,甚至在編譯時(shí)解決而沒有任何丑陋的矛盾時(shí),我們常常會(huì)充滿熱情?!?/span>
janriemer:“ npm工程師Chris Dickinson的一句話對(duì)我來(lái)說很完美,因?yàn)槲以诓恢喇?dāng)時(shí)的引用的情況下也曾想過:'我對(duì)Rust的最大稱贊是它很無(wú)聊,這是贊美?!?/span>
Rust是一種編程語(yǔ)言,看起來(lái)像是由用戶體驗(yàn)設(shè)計(jì)師開發(fā)的。他們對(duì)語(yǔ)言有清晰的愿景(為什么),并在聽取社區(qū)真正的需求的同時(shí),仔細(xì)選擇要添加到語(yǔ)言中的內(nèi)容和返工的內(nèi)容。沒有零散的結(jié)局,它是一個(gè)連貫的整體,可以完美地支持開發(fā)人員的工作流程?!?/span>
skysch:“我是從Haskell來(lái)到Rust的,我覺得Haskell是一種非常優(yōu)雅和安全的語(yǔ)言。對(duì)我而言,最大的區(qū)別是,Haskell中的高性能代碼和慣用的“干凈”代碼之間的差異比Rust中的差異更大。大多數(shù)Rust代碼看起來(lái)像大多數(shù)其他Rust代碼,即使它們表現(xiàn)良好。如果某人在與您通常執(zhí)行的操作不同的庫(kù)和目標(biāo)下進(jìn)行操作,Haskell可能很快就會(huì)變得陌生。語(yǔ)法上的微小差異會(huì)導(dǎo)致行為上的巨大差異,Rust在該軸上具有更高的一致性?!?/span>
daboross:“編譯時(shí)間保證:當(dāng)我想到“靜態(tài)類型的語(yǔ)言”時(shí),我想到的是Java,C?;騎ypeScript之類的東西。 它們?yōu)榫幾g時(shí)保證您的代碼具有正確的類型,并將錯(cuò)誤從運(yùn)行時(shí)轉(zhuǎn)移到編譯時(shí)。 銹在這方面更進(jìn)一步! 編譯時(shí)間檢查擴(kuò)展到線程安全,所有權(quán)語(yǔ)義和驗(yàn)證。
枚舉意味著在編譯時(shí),我可以聲明數(shù)據(jù)可以存在的一組變體,并且在訪問該數(shù)據(jù)時(shí),我不得不考慮所有可能性。 特性意味著,當(dāng)我的代碼是模板/通用的時(shí),我具有所需的確切功能。
Rust非常向后兼容。 我可以運(yùn)行為Rust 1.0編寫的代碼。 同樣,我可以編寫一些代碼,這些代碼使我知道下次更新Rust時(shí)不必更新。
我發(fā)現(xiàn)自己做的樣板代碼要少得多。 而我確實(shí)需要什么樣板代碼,我通??梢詫⑵潆[藏在其他模塊中,以免妨礙實(shí)際的應(yīng)用程序邏輯代碼。 (最常見的例子是錯(cuò)誤類型轉(zhuǎn)換)。”
安全和規(guī)?;俣?/strong>
當(dāng)前許多編程討論都圍繞是否使用允許您處理內(nèi)存管理的快速,低級(jí)語(yǔ)言或具有更高安全預(yù)防措施的高級(jí)語(yǔ)言進(jìn)行。對(duì)于Rust的粉絲來(lái)說,他們喜歡兩者都做。
我看到一個(gè)共同的異議,有些人宣稱它們實(shí)際上是完美的,并且確實(shí)編寫了完美的代碼,而且一切都是桃花心木,他們無(wú)法理解為什么其他所有人都對(duì)Rust如此感興趣。但是對(duì)于這只老山羊很明顯,這些人還沒有意識(shí)到問題不僅僅在于他們自己。其他人。這是規(guī)模經(jīng)濟(jì)的問題。
換句話說,如果我有時(shí)間和精力去關(guān)注每一個(gè)細(xì)節(jié),并且精心設(shè)計(jì)每條漂亮的線,而不論其語(yǔ)言或?qū)崿F(xiàn)細(xì)節(jié)如何,我自己都可以孤立地編寫無(wú)缺陷且無(wú)錯(cuò)誤的代碼。但這沒關(guān)系。一旦我開始依靠其他人編寫的代碼或新的貢獻(xiàn)者來(lái)進(jìn)行修改,我所有所謂的完美保證現(xiàn)在都不符合現(xiàn)實(shí)。 “按慣例正確性”無(wú)法擴(kuò)展。
慣例將有缺點(diǎn),并且將花費(fèi)不切實(shí)際的時(shí)間和精力來(lái)嘗試使本來(lái)不應(yīng)該存在的創(chuàng)可貼自動(dòng)化。 “啊哈!”現(xiàn)在意識(shí)到,通過將相同的約定直接烘焙到語(yǔ)言和編譯器中,實(shí)際上可以得到更強(qiáng)大的保證。
最重要的是,如果您愿意的話,您還可以獲得與微調(diào)的手寫程序集相當(dāng)?shù)男阅堋D梢猿缘案庖部梢猿?!?/span>
daboross:“作為圖書館作者,復(fù)雜的特征/通用系統(tǒng)意味著我可以制作復(fù)雜但易于使用的界面。這些界面不會(huì)被錯(cuò)誤地使用,這意味著我不必執(zhí)行運(yùn)行時(shí)檢查,并且我的用戶甚至不必考慮問題案例,因?yàn)樗麄儫o(wú)法編寫它們。
作為圖書館的消費(fèi)者,豐富而廣泛的板條箱生態(tài)系統(tǒng)使我能夠在不同的領(lǐng)域編寫代碼,而無(wú)需深入研究每個(gè)細(xì)節(jié)。我不需要知道JSON解析器或編寫器如何使用Serde,而且我的知識(shí)不足永遠(yuǎn)不會(huì)成為bug的來(lái)源,因?yàn)槲业玫降氖蔷幾g時(shí)錯(cuò)誤,而不是運(yùn)行時(shí)錯(cuò)誤。
使用Rust時(shí),我真的感到很照顧。從軟件包升級(jí)到類型錯(cuò)誤,再到傳遞接口不期望的字符串,再到隨機(jī)運(yùn)行時(shí)錯(cuò)誤,這些瑣碎的事情我都完全不在Rust中使用。我可以考慮一下算法!”
業(yè)余愛好者對(duì)具有挑戰(zhàn)性的語(yǔ)言的熱愛?
還記得我提到的辯論嗎?我看到一些來(lái)回的疑問是,“最受喜愛”的標(biāo)題是否來(lái)自Rust擁有很少的用戶群,而該用戶群大多選擇使用該語(yǔ)言。的確,在過去的一年中,只有5.1%的受訪者使用過Rust,這些用戶希望繼續(xù)使用Rust。
CAD97:坦率地說:我認(rèn)為Rust在這里受益匪淺,很少有人被迫使用Rust。多數(shù)人仍然選擇使用Rust。
我并不是說Rust不配標(biāo)簽(我很確定是這樣!),我只是在說Rust處于非常合適的位置,可以“游戲” SO在這里實(shí)際測(cè)量的指標(biāo),因?yàn)樗駸嵴叽蠓秶剡x擇采用,但是那些強(qiáng)迫人們使用他們不想繼續(xù)使用的語(yǔ)言的人采用率較低。”
ZiCog:“如果您使用任何編程語(yǔ)言足夠長(zhǎng)的時(shí)間,您就會(huì)認(rèn)為它很糟糕。使用很多年了,它們都很爛。
那些使用各種語(yǔ)言進(jìn)行大量編程并擁有技能和才能的人,最終發(fā)明并實(shí)現(xiàn)了自己的新編程語(yǔ)言,以解決他們過去遭受的所有痛苦。如您所知,因此,新語(yǔ)言像雜草一樣萌芽。
鑒于以上所述,如果您問程序員他們喜歡哪種語(yǔ)言,那將不會(huì)是他們正在使用的語(yǔ)言或過去使用的任何語(yǔ)言。
到目前為止,幾乎沒有程序員需要長(zhǎng)期使用Rust,他們當(dāng)然會(huì)說他們喜歡Rust。
PubNub的建筑師Jay Oster:“在過去的幾十年中,我對(duì)各種語(yǔ)言都有類似的'草總是綠色'的偏見。但是我認(rèn)為這不是造成這種現(xiàn)象的主要因素之一。如果是的話,我們可能會(huì)期望一些較新的語(yǔ)言在這些調(diào)查中脫穎而出,對(duì)嗎?”
H2CO3:“到目前為止,Rust是我最喜歡的語(yǔ)言,盡管事實(shí)上我已經(jīng)使用了4年(出于性能的需要,用于個(gè)人項(xiàng)目以及“真實(shí)”代碼)。當(dāng)我在C和C ++方面擁有豐富的經(jīng)驗(yàn)時(shí),我已經(jīng)發(fā)現(xiàn)了它們的嚴(yán)重缺陷。
大約一年左右后,Heck甚至Haskell(最講究?jī)?yōu)雅的語(yǔ)言)也表現(xiàn)出不可避免的丑陋,那時(shí)我不得不開始研究語(yǔ)言擴(kuò)展和方言,以便獲得一個(gè)稍微高級(jí)的庫(kù)來(lái)進(jìn)行編譯。
Rust根本沒有發(fā)生這種情況。迷霧籠罩的步槍和設(shè)計(jì)錯(cuò)誤從未出現(xiàn)過?!?/span>
asafigan:“我相信Rust的學(xué)習(xí)難度很大,但使用起來(lái)卻很有意義。只要獎(jiǎng)勵(lì)足夠好,我真的感到驚訝有多少人喜歡挑戰(zhàn)。
我發(fā)現(xiàn)Rust很難學(xué)習(xí),但非常易于使用。我認(rèn)為很多人都是用另一種語(yǔ)言來(lái)學(xué)習(xí)Rust的,并且感到驚訝(它很難學(xué)習(xí))。但是他們忘記了學(xué)習(xí)編程的艱辛。在大學(xué)里,我們開設(shè)了兩門有關(guān)Java面向?qū)ο缶幊痰恼n程。到最后,大多數(shù)人仍然沒有真正理解它。 Rust與其他語(yǔ)言完全不同,難以學(xué)習(xí)。如果您只知道OOP,就很難說出函數(shù)式編程。如果您所知道的全部是功能性的,則很難學(xué)習(xí)OOP。如果您只知道GC或手動(dòng)內(nèi)存管理,則很難學(xué)習(xí)所有權(quán)。性格也很奇怪。但是值得擁有更好的軟件?!?/span>
cfsamson:“在Rust中,我發(fā)現(xiàn)很多工作都花在了前面。它使一些容易上手的難題變得更難上手,但以后再也不會(huì)產(chǎn)生難題。如果有問題,問題域本身通常比我想的要難,并且與我使用的工具無(wú)關(guān)。我發(fā)現(xiàn)我預(yù)先支付的價(jià)格絕對(duì)物有所值。熟悉語(yǔ)言后,我還會(huì)發(fā)現(xiàn)價(jià)格低廉?!?/span>
為什么Rust團(tuán)隊(duì)認(rèn)為它很受歡迎
如果您想知道什么使忠實(shí)的支持者成功,請(qǐng)與最忠實(shí)的支持者交談,對(duì)嗎?我聯(lián)系了Rust團(tuán)隊(duì),以了解他們?yōu)槭裁凑J(rèn)為Rust年復(fù)一年地獲得如此多的愛。格式略有不同,我保留了問題和答案的布局。
Erin Power是位于柏林的Rust開發(fā)人員。她從2015年的1.0開始使用Rust。她是Rust治理工作組的負(fù)責(zé)人之一,并且是“ Tokei”的創(chuàng)建者,這是一個(gè)用Rust編寫的流行開源代碼計(jì)數(shù)器。
問:使用Rust的人似乎真的很喜歡它;你為什么這么認(rèn)為呢?
答:我認(rèn)為這是因?yàn)镽ust做出了重大承諾并兌現(xiàn)了承諾。
Rust提供了與其他高級(jí)語(yǔ)言一樣的自動(dòng)內(nèi)存管理功能,但由于它是在編譯時(shí)完成的,因此無(wú)需考慮任何隱藏的成本或行為。
Rust始終按照我們對(duì)現(xiàn)代硬件的期望進(jìn)行設(shè)計(jì)。在其他語(yǔ)言中,線程安全和數(shù)據(jù)競(jìng)賽可能是其他語(yǔ)言的常見“步槍”。因此,無(wú)需太多更改或麻煩即可充分利用工作站的功能非常容易。始終令人印象深刻的是,rayon(Rust中流行的庫(kù))如何僅更改一行代碼就能并行化整個(gè)工作負(fù)載。
結(jié)果,用Rust編寫了許多高質(zhì)量和快速的實(shí)現(xiàn),而且由于有cargo和crates.io(Rust的程序包管理器和社區(qū)運(yùn)行的程序包注冊(cè)表),在內(nèi)部和內(nèi)部重用和共享該代碼從未如此簡(jiǎn)單。與整個(gè)世界。
Cargo處理一個(gè)大型存儲(chǔ)庫(kù)時(shí)會(huì)處理好幾十到十個(gè)軟件包,您無(wú)需花費(fèi)幾天時(shí)間編寫構(gòu)建文件即可獲得所需的配置。
Rust不僅易于管理和更新您的Rust依賴項(xiàng),而且Rust本身也非常易于升級(jí)和使用Rustup在不同語(yǔ)言版本之間進(jìn)行切換;默認(rèn)情況下包含的工具鏈版本管理器。
以上任何一點(diǎn)都足以使人喜歡Rust,但總的來(lái)說,它使Rust成為一種令人難以置信的引人入勝的語(yǔ)言,使您在編寫和創(chuàng)建項(xiàng)目時(shí)感到耳目一新。
問:Rust團(tuán)隊(duì)計(jì)劃讓用戶喜歡上它嗎?
答:我不能說所有團(tuán)隊(duì)的計(jì)劃,因?yàn)镽ust擁有數(shù)十個(gè)團(tuán)隊(duì),其中大多數(shù)都是自愿者,他們都是半自愿地致力于改善Rust語(yǔ)言和周圍的生態(tài)系統(tǒng)。您可以在GitHub上找到該項(xiàng)目的年度路線圖(盡管我會(huì)注意到它是在COVID-19之前提出并編寫的)。
問:你們都定期使用Rust嗎?為何如此?
答:自2015年發(fā)行1.0以來(lái),我一直在編寫Rust,從那時(shí)起,我一直在嘗試花費(fèi)大量的編程時(shí)間來(lái)編寫它。我編寫并維護(hù)了許多開源應(yīng)用程序和庫(kù),自2018年以來(lái)我一直在與Rust進(jìn)行專業(yè)合作。
問:我看到一些評(píng)論說Rust很難掌握,在我們的調(diào)查中,只有很少(?5%)的人使用過Rust。您認(rèn)為進(jìn)入Rust的門檻很高嗎?為什么或者為什么不?
答:我認(rèn)為Rust中肯定有一些特定的概念,使他們難以學(xué)習(xí)和使用。盡管講了幾句,但我在Rust之前的背景是完整的Web開發(fā)和設(shè)計(jì)。我以前沒有“系統(tǒng)”或“功能”語(yǔ)言的經(jīng)驗(yàn),并且發(fā)現(xiàn)在Rust中學(xué)習(xí)這些概念比其他現(xiàn)有語(yǔ)言更容易,因此我不同意Rust整體上存在很高的障礙。
我覺得很多障礙來(lái)自于Rust是一種相對(duì)較新的編程語(yǔ)言,并且目前還沒有來(lái)自其他角度的豐富資源,這些資源適合不同人的思維模式,可以像使用較完善的語(yǔ)言一樣學(xué)習(xí)。希望隨著時(shí)間的流逝,我們將擁有更多多樣化的學(xué)習(xí)資料,以幫助教授和增進(jìn)對(duì)這些概念的理解。
盡管只有一小部分人編寫了Rust,但它的采用取得了如此成功,但人們?nèi)粘J褂玫脑S多關(guān)鍵軟件已經(jīng)在Rust中進(jìn)行了重寫或創(chuàng)建。 Rust已經(jīng)在五大科技公司中的每一個(gè)中都得到采用,而不僅僅是感興趣的企業(yè)。像Dropbox或OneSignal這樣的小型科技公司,在Rust中都擁有許多服務(wù)的核心基礎(chǔ)架構(gòu)。從長(zhǎng)遠(yuǎn)來(lái)看,我認(rèn)為Rust沒有比其他任何語(yǔ)言更高的學(xué)習(xí)障礙。這是一種非常一致的語(yǔ)言,一旦您掌握了基礎(chǔ)知識(shí),它們就會(huì)使您受益匪淺。不過,這條路上有一個(gè)急轉(zhuǎn)彎:Rust是您走路前最差的語(yǔ)言。原因是它的核心概念(尤其是所有權(quán))沒有其他編程語(yǔ)言可以比擬的東西。這個(gè)概念非常細(xì)微。這意味著Rust在一兩天內(nèi)很難恢復(fù)。大多數(shù)人報(bào)告說,他們需要大約一到兩周的時(shí)間才能提高生產(chǎn)力。在Rust中具有生產(chǎn)能力的人們喜歡一定的嚴(yán)謹(jǐn)性并為正確性而努力,但這需要一些時(shí)間來(lái)建立。
鑒于我們?cè)谶^去幾年中看到在我們的行業(yè)和工具中朝著“立即獲得生產(chǎn)力”的方向漂移,我可以理解Rust的入職體驗(yàn)與人們過去的習(xí)慣有很大不同。我希望我們找到了一種在不影響長(zhǎng)期體驗(yàn)的前提下提供這種新手體驗(yàn)的方法。
作者介紹
熱門博客推薦