當(dāng)前位置:首頁(yè) >  站長(zhǎng) >  編程技術(shù) >  正文

為什么程序員如此鐘愛(ài)rust

 2020-07-01 17:37  來(lái)源: A5用戶投稿   我來(lái)投稿 撤稿糾錯(cuò)

  域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)

2020年開(kāi)發(fā)人員調(diào)查的結(jié)果再次出現(xiàn),Rust再次成為參與該計(jì)劃的65,000位程序員中最受歡迎的語(yǔ)言之一。

自2016年以來(lái),Rust一直排名第一,這表明使用它的開(kāi)發(fā)人員都喜歡它。表示目前正在使用Rust的調(diào)查受訪者中有86.1%希望明年繼續(xù)使用Rust.這是Rust連續(xù)第五年榮登榜首,因此我們認(rèn)為它必須有一些特別之處。

幾個(gè)月前,我們請(qǐng)Stack Overflow的主要Rust貢獻(xiàn)者Jake Goulding(又名Shepmaster)來(lái)解釋編碼人員為何如此喜愛(ài)用Rust語(yǔ)言,他這樣認(rèn)為:“簡(jiǎn)單來(lái)說(shuō),Rust解決了許多其他語(yǔ)言中存在的痛點(diǎn),從而在有限的缺點(diǎn)下邁出了堅(jiān)實(shí)的一步。”

對(duì)于Rust語(yǔ)言的評(píng)價(jià)也非常多,下面這些是網(wǎng)盾整理的Rust聊天室和Rust論壇上用戶們發(fā)表的評(píng)論,他涵蓋了Rust對(duì)于來(lái)自其他語(yǔ)言的編碼人員的好處(以及痛點(diǎn))。我們希望聽(tīng)到更多用戶的來(lái)信。

Rustaceans本身(包括Rust核心團(tuán)隊(duì)的兩名成員)的評(píng)論:

“全新的成熟的功能。盡管某些語(yǔ)言只是在增加和簡(jiǎn)化現(xiàn)有概念,但一些用戶認(rèn)為Rust實(shí)際上是在用編程語(yǔ)言來(lái)做新的事情。而且它并不是為了炫耀而做新的事情。他們認(rèn)為這些設(shè)計(jì)選擇解決了現(xiàn)代編程中的難題”

ZiCog:“Rust是我四十年來(lái)專門使用的唯一一種語(yǔ)言,它實(shí)際上引入了真正的新功能。就這樣,在沒(méi)有垃圾回收或復(fù)雜的系統(tǒng)運(yùn)行時(shí)情況下,使用經(jīng)過(guò)編譯的,真實(shí)的系統(tǒng)編程語(yǔ)言來(lái)保護(hù)內(nèi)存使用的整個(gè)思想。"

DenysSéguret:“當(dāng)我們發(fā)現(xiàn)一個(gè)非常強(qiáng)大的功能(例如在env變量的偽裝下讀取一個(gè)編譯上下文元素)可以如此優(yōu)雅地完成,甚至在編譯時(shí)解決而沒(méi)有任何難看的不一致之處時(shí),我們常常會(huì)充滿熱情。”

Janriemer: “pm工程師克里斯·迪金森(Chris Dickinson)的一句話對(duì)我來(lái)說(shuō)是完美的總結(jié),因?yàn)槲耶?dāng)時(shí)也是這么想的,當(dāng)時(shí)我還不知道這句話:‘我對(duì)Rust的最大稱贊是它很無(wú)聊,這是一個(gè)了不起的稱贊。Rust是一種編程語(yǔ)言,看起來(lái)像是由用戶體驗(yàn)設(shè)計(jì)師開(kāi)發(fā)的。他們對(duì)語(yǔ)言有清晰的愿景(原因),并在傾聽(tīng)社區(qū)真正需求的同時(shí),仔細(xì)選擇要添加到語(yǔ)言中的內(nèi)容和返工的內(nèi)容。沒(méi)有零散的結(jié)局,它是一個(gè)連貫的整體,可以完美地支持開(kāi)發(fā)人員的工作流程。"

skysch:“我是從Haskell來(lái)到Rust的,我覺(jué)得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在該基準(zhǔn)線上具有更高的一致性。”

PubNub的設(shè)計(jì)師Jay Oster:“除了安全和性能外,我們還有:

一般性的特質(zhì);

代數(shù)類型;

功能和命令式范式;

也許是世界上最好的依賴管理和構(gòu)建工具;

實(shí)際上已經(jīng)解決了“依賴苦痛的境況”問(wèn)題;

對(duì)聯(lián)機(jī)的文檔,測(cè)試和基準(zhǔn)的出色支持;

龐大且不斷發(fā)展的庫(kù),抽象和工具生態(tài)系統(tǒng);

程序宏指令;

FFI現(xiàn)有代碼的互操作性;

支持?jǐn)?shù)十種平臺(tái)(更多功能即將推出!);

以及有益健康且確鑿的開(kāi)發(fā)人員體驗(yàn)。

Rust是勾選所有框的唯一語(yǔ)言:

內(nèi)存安全

類型安全

無(wú)數(shù)據(jù)競(jìng)爭(zhēng)

提前編譯

建立并鼓勵(lì)零成本抽象

最小的運(yùn)行時(shí)間(沒(méi)有垃圾回收機(jī)制,沒(méi)有JIT編譯器,沒(méi)有VM)

低內(nèi)存占用(程序在資源受限的環(huán)境中運(yùn)行,例如小型微控制器)

定位裸機(jī)(例如,編寫OS內(nèi)核或設(shè)備驅(qū)動(dòng)程序;將Rust用作“高級(jí)匯編程序”)

daboross:“編譯時(shí)間保證:當(dāng)我想到“靜態(tài)類型的語(yǔ)言”時(shí),我想到的是Java,C#或類似TypeScript的東西。它們?yōu)榫幾g時(shí)保證您的代碼具有正確的類型,并將一系列錯(cuò)誤從運(yùn)行時(shí)轉(zhuǎn)移到編譯時(shí)。Rust在這方面更進(jìn)一步!編譯時(shí)間檢查擴(kuò)展到線程安全,所有權(quán)語(yǔ)義和驗(yàn)證。

枚舉意味著在編譯時(shí),我可以聲明數(shù)據(jù)可以存在的一組變體,并且在訪問(wèn)該數(shù)據(jù)時(shí),我不得不考慮所有可能性。特性意味著,當(dāng)我的代碼是模板/通用的時(shí),我具有所需的確切功能。

Rust非常向后兼容。我可以運(yùn)行為Rust 1.0編寫的代碼。同樣,我可以編寫一些代碼,這些代碼使我知道下次更新Rust時(shí)不必更新。

而且不只是Rust本身-語(yǔ)言可用庫(kù)擁有相同的保證??紤]兩個(gè)事實(shí):

1、在類型檢查中,僅考慮功能的簽名。無(wú)需依靠實(shí)現(xiàn)來(lái)確定請(qǐng)求是否正確(就像您在Scala或Haskell中所做的那樣)

2、廣泛的類型系統(tǒng)意味著對(duì)接口的不正確使用將成為類型錯(cuò)誤,而不是運(yùn)行時(shí)錯(cuò)誤。

由于這兩件事,庫(kù)可以100%確保在發(fā)布新接口時(shí)它們保持向后兼容性。在Python,Java,Javascript或Scala或Haskell中,如果要確保保持向后兼容性,則需要特別注意事物的貫徹。在Rust中,它是免費(fèi)的:如果您還沒(méi)有更改功能簽名,它將保持不變。”

Peter Varo:“Rust發(fā)現(xiàn)了一個(gè)好地方:它與C或C ++一樣基礎(chǔ),具有所有這些優(yōu)點(diǎn)(例如,控制,大小,速度等)。同時(shí),它與Haskell具有驚人的功能傳承。它仍然是必須的,因此大多數(shù)人都可以使用,并且它與Python一樣靈活。例如,諸如“鴨式打字”之類的概念是在編譯時(shí)發(fā)生的(即特征邊界),但是它沒(méi)有過(guò)時(shí)的,面向?qū)ο蟮木幊棠P图捌渌斜娝苤膯?wèn)題。

最后但并非最不重要的一點(diǎn)是,其中包括以下內(nèi)容:簡(jiǎn)潔的語(yǔ)法,少量語(yǔ)言提供的功能,標(biāo)準(zhǔn)庫(kù)的完整性以及其一致性和文檔質(zhì)量,包括兩者初學(xué)者和高級(jí)用戶的學(xué)習(xí)材料都是影響因素。”

Blonk:“借助Rust / cargo,我可以專注于實(shí)際代碼,而不是構(gòu)建系統(tǒng)。無(wú)需花一整天的時(shí)間來(lái)閱讀“另一個(gè)構(gòu)建系統(tǒng)”。與Rust的交叉編譯是如此簡(jiǎn)單和輕松,以至于當(dāng)您閱讀如何做時(shí),您會(huì)不禁想到“等等,我一定會(huì)丟失一些東西。”

當(dāng)您不在Rust之外時(shí),有些聽(tīng)起來(lái)像是空口號(hào),但是當(dāng)您開(kāi)始使用它時(shí),您會(huì)驚喜地意識(shí)到有很多真相:

在花費(fèi)時(shí)間來(lái)編譯代碼時(shí),您可以節(jié)省時(shí)間,而不必調(diào)試代碼。

您不再擔(dān)心大型重構(gòu)。重構(gòu)的代碼編譯后,即可正常工作。

它確實(shí)確實(shí)迫使您執(zhí)行適當(dāng)?shù)亩嗑€程處理(嗯,您仍然可以有死鎖,但是崩潰的錯(cuò)誤類型要困難得多)。

我發(fā)現(xiàn)自己做的樣板代碼要少得多。以及我需要的樣板代碼,我通??梢詫⑵潆[藏在其他模塊中,以免妨礙實(shí)際的應(yīng)用程序邏輯代碼.最常見(jiàn)的例子是錯(cuò)誤類型轉(zhuǎn)換)。”

PubNub的設(shè)計(jì)師Jay Oster:“這就像在整個(gè)職業(yè)生涯中在完全黑暗的環(huán)境中徘徊,突然被兩個(gè)事物所點(diǎn)亮:

1、你不完美。你會(huì)犯錯(cuò)誤。這些錯(cuò)誤會(huì)給您帶來(lái)很多問(wèn)題。

2、不必是這種方式。

我看到一個(gè)共同的異議,有些人宣稱它們實(shí)際上是完美的,并且確實(shí)編寫了完美的代碼,而且一切都是桃花心木,并且他們無(wú)法理解為什么其他所有人都對(duì)Rust如此感興趣。但是對(duì)于這只老山羊很明顯,這些人還沒(méi)有意識(shí)到問(wèn)題不僅僅在于他們自己。其他人。這是規(guī)模經(jīng)濟(jì)的問(wèn)題。

換句話說(shuō),如果我有時(shí)間和精力去關(guān)注每一個(gè)細(xì)節(jié),并且精心編寫每條漂亮的代碼,而不管語(yǔ)言或?qū)崿F(xiàn)細(xì)節(jié)如何,我本人就可以孤立地編寫無(wú)缺陷且無(wú)錯(cuò)誤的代碼。但這沒(méi)關(guān)系。一旦我開(kāi)始依靠其他人編寫的代碼或新的貢獻(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í)到,通過(guò)將相同的約定直接烘焙到語(yǔ)言和編譯器中,實(shí)際上可以得到更強(qiáng)大的保證。

最重要的是,如果您愿意,您還可以獲得與微調(diào)的手寫程序集相當(dāng)?shù)男阅?。您可以吃蛋糕也可以?”

Daboross:“作為庫(kù)類的作者,復(fù)雜的特征/通用系統(tǒng)意味著我可以制作復(fù)雜但易于使用的界面。這些界面不能被錯(cuò)誤地使用,這意味著我不必執(zhí)行運(yùn)行時(shí)檢查,并且我的用戶甚至不必考慮問(wèn)題案例,因?yàn)樗麄儫o(wú)法編寫它們。

作為庫(kù)類的使用者,豐富而廣泛的模板生態(tài)系統(tǒng)使我能夠在廣泛的不同領(lǐng)域中編寫代碼,而無(wú)需深入研究每個(gè)領(lǐng)域的細(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中完全沒(méi)有這種錯(cuò)誤。我可以考慮一下算法!

申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)標(biāo)簽
編程語(yǔ)言
程序員
程序員之死

相關(guān)文章

熱門排行

信息推薦