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