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

為什么程序員如此鐘愛rust

 2020-07-01 17:37  來源: A5用戶投稿   我來投稿 撤稿糾錯

  域名預(yù)訂/競價,好“米”不錯過

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

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

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

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

Rustaceans本身(包括Rust核心團隊的兩名成員)的評論:

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

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

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

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

skysch:“我是從Haskell來到Rust的,我覺得Haskell是一種非常優(yōu)雅和安全的語言。對我而言,最大的區(qū)別在于,Haskell中的高性能代碼和慣用的“干凈”代碼之間的差異比Rust中的差異更大。大多數(shù)Rust代碼看起來像大多數(shù)其他Rust代碼,即使它們表現(xiàn)良好。如果某人在與您通常執(zhí)行的操作不同的庫和目標(biāo)下進行操作,Haskell可能很快就會變得陌生。語法上的微小差異會導(dǎo)致行為上的巨大差異,Rust在該基準(zhǔn)線上具有更高的一致性。”

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

一般性的特質(zhì);

代數(shù)類型;

功能和命令式范式;

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

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

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

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

程序宏指令;

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

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

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

Rust是勾選所有框的唯一語言:

內(nèi)存安全

類型安全

無數(shù)據(jù)競爭

提前編譯

建立并鼓勵零成本抽象

最小的運行時間(沒有垃圾回收機制,沒有JIT編譯器,沒有VM)

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

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

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

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

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

而且不只是Rust本身-語言可用庫擁有相同的保證。考慮兩個事實:

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

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

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

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

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

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

當(dāng)您不在Rust之外時,有些聽起來像是空口號,但是當(dāng)您開始使用它時,您會驚喜地意識到有很多真相:

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

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

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

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

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

1、你不完美。你會犯錯誤。這些錯誤會給您帶來很多問題。

2、不必是這種方式。

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

換句話說,如果我有時間和精力去關(guān)注每一個細(xì)節(jié),并且精心編寫每條漂亮的代碼,而不管語言或?qū)崿F(xiàn)細(xì)節(jié)如何,我本人就可以孤立地編寫無缺陷且無錯誤的代碼。但這沒關(guān)系。一旦我開始依靠其他人編寫的代碼或新的貢獻(xiàn)者來進行修改,我所有所謂的完美保證現(xiàn)在都不符合現(xiàn)實。“按慣例正確性”無法擴展。

慣例將有缺點,并且將花費不切實際的時間和精力來嘗試使本來不應(yīng)該存在的創(chuàng)可貼自動化。“啊哈!”現(xiàn)在意識到,通過將相同的約定直接烘焙到語言和編譯器中,實際上可以得到更強大的保證。

最重要的是,如果您愿意,您還可以獲得與微調(diào)的手寫程序集相當(dāng)?shù)男阅堋D梢猿缘案庖部梢猿?”

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

作為庫類的使用者,豐富而廣泛的模板生態(tài)系統(tǒng)使我能夠在廣泛的不同領(lǐng)域中編寫代碼,而無需深入研究每個領(lǐng)域的細(xì)節(jié)。我不需要知道JSON解析器或編寫器如何使用Serde,而且我的知識不足永遠(yuǎn)不會成為bug的來源,因為我得到的是編譯時錯誤,而不是運行時錯誤。

使用Rust時,我真的感到很被照顧。從包升級到類型錯誤,再到傳遞接口不期望的字符串,再到隨機運行時錯誤,這些瑣碎的事情變得非常多,而我在Rust中完全沒有這種錯誤。我可以考慮一下算法!

申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

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

相關(guān)文章

熱門排行

信息推薦