午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Rust 與信息學(xué)三定律

 菌心說 2021-11-30
文章圖片1

在Java領(lǐng)域工作了10年之后,最近我一直在更認(rèn)真地研究Rust。 我?guī)缀鯖]有開始Rust編程,但是我感到很熱情:我相信Rust應(yīng)該引起注意,因?yàn)檫@是語(yǔ)言平衡的轉(zhuǎn)變。

tl; dr

Rust可以在嵌入式芯片,Web應(yīng)用程序和分布式系統(tǒng)中運(yùn)行。 它結(jié)合了C的速度,C是一種現(xiàn)代的強(qiáng)類型系統(tǒng),可以安全地管理內(nèi)存和高質(zhì)量的生態(tài)系統(tǒng)。 它使編寫并發(fā)代碼變得簡(jiǎn)單而安全。 Rust社區(qū)熱情,友好,非?;钴S并且正在開發(fā)出色的軟件。 Rust已在生產(chǎn)中使用,并且可以正常工作,但某些零件仍在完善中。 我要參加這個(gè)有趣的活動(dòng),不讓您知道:-)

從Java到Rust

Java和Rust是非常不同的語(yǔ)言,據(jù)認(rèn)為它們針對(duì)不同的空間。 有人問我為什么Java開發(fā)人員(無聊的開發(fā)人員)會(huì)對(duì)Rust感興趣。 事實(shí)證明,我選擇Java的理由與現(xiàn)在將我引向Rust的理由相同。 讓我描述指導(dǎo)我選擇語(yǔ)言和技術(shù)的原則:信息學(xué)的三定律!

信息學(xué)三定律

我將它們稱為'信息學(xué)三定律'。 這些定律的內(nèi)容可能不是很原始(不是真正的定律),但是像阿西莫夫的定律一樣,它們?cè)噲D找到最基本的正交公理,從中可以得出想要的特性。 它們是盡力而為的法則,因?yàn)橥昝朗俏覀儫o法掌握的。

開始了:

  • 程序必須正確。
  • 程序必須是可維護(hù)的,除非與第一法相沖突。
  • 程序必須高效,除非與第一或第二定律相抵觸。

第一定律意味著程序在所有情況下都應(yīng)按預(yù)期方式運(yùn)行。 這意味著軟件應(yīng)盡量避免出現(xiàn)錯(cuò)誤,安全問題,并且永遠(yuǎn)不會(huì)崩潰。

第二定律意味著,程序應(yīng)該經(jīng)過精心設(shè)計(jì)和記錄(因?yàn)楸仨殞?duì)代碼有很好的理解)和模塊化,因?yàn)椴荒芫S護(hù)大型組件。 還應(yīng)該有幫助開發(fā)人員維護(hù)程序的工具。 由于設(shè)計(jì)清晰并且可以熟練掌握該語(yǔ)言,因此部分演進(jìn)不應(yīng)保證完全重寫,并且另一位開發(fā)人員應(yīng)能夠進(jìn)行必要的更改。

第三定律意味著,對(duì)于最可能的輸入,程序應(yīng)趨向于在速度和資源消耗之間達(dá)到最佳的平衡,即根據(jù)其使用方式。 這意味著我們應(yīng)該為工作使用最佳的數(shù)據(jù)結(jié)構(gòu),以最佳的權(quán)衡取舍,因?yàn)榇蠖鄶?shù)時(shí)候沒有全局最優(yōu),要適當(dāng)?shù)剡M(jìn)行擴(kuò)展計(jì)劃,并使代碼對(duì)運(yùn)行它的計(jì)算機(jī)表示同情。

這三個(gè)法律共同為生機(jī)勃勃的生態(tài)系統(tǒng)和社區(qū)提出了要求。 開發(fā)人員不能單獨(dú)編寫正確,可維護(hù)和高效的程序,因?yàn)楝F(xiàn)代程序所依賴的代碼比一個(gè)開發(fā)人員所能產(chǎn)生的更多。 他們必須重用社區(qū)提供的組件。 他們必須共享一個(gè)社區(qū)健康的信念,即社區(qū)正在成長(zhǎng),或者規(guī)模足夠大,可以維護(hù)現(xiàn)有組件,并且可以構(gòu)建新組件。 這使得在選擇編程環(huán)境時(shí),圍繞語(yǔ)言的社區(qū)成為最重要的因素。

三定律的順序

正確性無疑是我們?cè)谲浖械闹饕P(guān)注點(diǎn)。 如果某個(gè)軟件不能正常工作,則不值得運(yùn)行。 如果不安全,則存在安全風(fēng)險(xiǎn)。 這顯然使我們的第一定律正確無誤。

但是,人們可能會(huì)爭(zhēng)論,可維護(hù)性是否應(yīng)比效率更重要,反之亦然。 當(dāng)完全忽略可維護(hù)性時(shí),程序可能會(huì)獲得更好的性能,而僅考慮正確性和可維護(hù)性的編程可能會(huì)導(dǎo)致程序完全無效。

實(shí)際上,可維護(hù)性和效率是交織在一起的:圍繞高效解決方案構(gòu)建好的架構(gòu)。 例如,圍繞Rope數(shù)據(jù)結(jié)構(gòu)構(gòu)建了Xi編輯器,旨在成為'未來20年'的高性能編輯器。 自上而下地設(shè)計(jì)系統(tǒng)可能會(huì)阻止實(shí)現(xiàn)有效的解決方案; 自下而上地設(shè)計(jì)它們可能會(huì)泄漏太多的實(shí)現(xiàn)細(xì)節(jié),并阻止干凈的,松耦合的體系結(jié)構(gòu)。

不過,如果某個(gè)軟件正確且高效,但無法維護(hù),則僅是一個(gè)黑匣子。 如果我們不了解,我們是否確信它是正確的? 相反,效率低下但正確且可維護(hù)的程序可能仍然可以挽救。 可維護(hù)性成為第二定律。

定律和語(yǔ)言

信息學(xué)三定律僅涉及程序。 但是編程語(yǔ)言可以提供保證,構(gòu)造,工具,執(zhí)行環(huán)境,社區(qū)或生態(tài)系統(tǒng),以幫助開發(fā)人員構(gòu)建遵守法律的程序。 讓我們看一些選項(xiàng)。

系統(tǒng)語(yǔ)言

C和C ++共享一些屬性。 它們非常適合編寫快速,占用資源少的代碼。 手動(dòng)內(nèi)存管理將安全交給開發(fā)人員(他們幾乎不記得他們離開手機(jī)的地方?。?。 C沒有附帶電池,因此您經(jīng)常需要重寫數(shù)據(jù)結(jié)構(gòu); C ++如此龐然大物,每個(gè)項(xiàng)目都定義了他們使用或不使用語(yǔ)言的哪一部分(Google因不使用異常而聞名)。 由于它們都不安全,因此依賴于另一個(gè)庫(kù)會(huì)增加安全漏洞的風(fēng)險(xiǎn)。

Go填補(bǔ)了C ++嚇跑開發(fā)人員的空白。 它的目標(biāo)是速度快,并使使用例程輕松編寫并發(fā)代碼。 它是垃圾收集的,因此比C ++更安全。 它具有一個(gè)簡(jiǎn)單的類型系統(tǒng),沒有泛型和代數(shù)數(shù)據(jù)類型,不支持代碼重用以及其他現(xiàn)代語(yǔ)言。 盡管如此,它仍然有一個(gè)非常活躍的社區(qū),可能受到Google的光環(huán)的吸引,并跟隨Docker的腳步。

JVM生態(tài)系統(tǒng)

Java是一種相當(dāng)簡(jiǎn)單的常規(guī)語(yǔ)言。 Java的重用歷史悠久,在整合第三方工件方面可能是冠軍,有時(shí)使大型項(xiàng)目看起來像科學(xué)怪人的怪獸。 Java具有語(yǔ)言和虛擬機(jī)支持的出色工具。 現(xiàn)代JVM'及時(shí)'編譯代碼,并將其轉(zhuǎn)變?yōu)楦咝У谋緳C(jī)代碼。 有不同的垃圾收集器提供不同的權(quán)衡。 哦,我提到過Java社區(qū)很大嗎?

Kotlin試圖通過減少冗長(zhǎng)程度并提供一個(gè)更強(qiáng)大的,可空值安全的類型系統(tǒng)來提供Java'語(yǔ)言'的替代方案。 它主要針對(duì)JVM,并具有與Java相同的優(yōu)勢(shì)(也有Kotlin / Native)。 由JetBrains創(chuàng)建的工具顯然非常出色。 現(xiàn)在已正式為Android開發(fā)提供支持,并且可以保留。

函數(shù)式編程語(yǔ)言或FP語(yǔ)言

Haskell和OCaml最初是作為研究項(xiàng)目開始的,但近年來在該行業(yè)中越來越受歡迎。 它們很安全,提供了出色的設(shè)計(jì)原語(yǔ)(尤其是類型類和模塊)和編程模型,以我的經(jīng)驗(yàn),這些模型會(huì)減少錯(cuò)誤。 它們都是垃圾-GC是為第一種FP語(yǔ)言LISP發(fā)明的。 特別是Haskell,它是完全純凈的,具有很大的好處:所有效果(例如IO)都明確表示為類型,這使開發(fā)人員不必?fù)?dān)心意外發(fā)生的副作用,但會(huì)變得麻煩。 他們的社區(qū)都包括許多研究人員,可幫助建立堅(jiān)實(shí)的正式基礎(chǔ)。

還有更多語(yǔ)言

我不會(huì)再討論其他所有語(yǔ)言。 有些人在其生態(tài)系統(tǒng)和社區(qū)方面具有非常明顯的優(yōu)勢(shì)。 Python擁有出色的數(shù)據(jù)分析生態(tài)系統(tǒng),Erlang幫助使用actor構(gòu)建容錯(cuò)分布式系統(tǒng),Scala是Kotlin的更老,更狂的兄弟姐妹,Clojure和Racket是現(xiàn)代的Lisps,而TypeScript則試圖使JavaScript有意義!

第三定律的覺醒

確實(shí)有許多有趣的語(yǔ)言。 他們中的大多數(shù)人都有自己的長(zhǎng)處和好主意。 他們有多少幫助愿意的開發(fā)人員遵循信息學(xué)三定律?

可維護(hù)性主要由良好的設(shè)計(jì)原語(yǔ)(也稱為語(yǔ)言構(gòu)造),良好的工具和社區(qū)來解決。 不同的學(xué)校對(duì)什么構(gòu)成好的原語(yǔ)有不同的看法:我個(gè)人更喜歡現(xiàn)代的強(qiáng)類型FP語(yǔ)言選擇的那些。

除了可維護(hù)性之外,有兩種主流語(yǔ)言:具有手動(dòng)內(nèi)存管理的語(yǔ)言和具有垃圾回收的語(yǔ)言。 由于我們的開發(fā)人員并不完善,因此手動(dòng)內(nèi)存管理也意味著不安全,因此缺乏正確性。 在過去的25年中,垃圾收集雖然產(chǎn)生了開銷,但在新的主流語(yǔ)言中已成為事實(shí)上的標(biāo)準(zhǔn),因?yàn)榘踩冉^對(duì)性能更重要。

Rust是第一種提出替代方案的流行語(yǔ)言-自動(dòng)內(nèi)存管理和無垃圾收集的安全性-它帶有功能強(qiáng)大的FP啟發(fā)性設(shè)計(jì)原語(yǔ),可構(gòu)建高級(jí)抽象等等。

如果我們現(xiàn)在可以安全地構(gòu)建更高效的軟件,不是嗎? 還是應(yīng)該針對(duì)開發(fā)生產(chǎn)力進(jìn)行優(yōu)化? 我們能同時(shí)擁有嗎?

一個(gè)新的挑戰(zhàn)者來了

Rust是一種系統(tǒng)編程語(yǔ)言,運(yùn)行速度極快,可防止出現(xiàn)段錯(cuò)誤并保證線程安全。 (rust-lang.org)

Rust已經(jīng)存在了一段時(shí)間,但是直到2015年Rust 1.0發(fā)行時(shí)才進(jìn)行試驗(yàn)。 從那時(shí)起,該語(yǔ)言及其生態(tài)系統(tǒng)得到了發(fā)展并得到了極大的改善。 它將持續(xù)改善數(shù)年,但是核心團(tuán)隊(duì)致力于不破壞用戶代碼。

與Go一樣,Rust旨在為對(duì)系統(tǒng)編程感興趣的開發(fā)人員提供一種嚴(yán)肅的選擇。 但是,它從語(yǔ)言研究和現(xiàn)有編程語(yǔ)言的成功經(jīng)驗(yàn)中更多地借鑒(雙關(guān)語(yǔ)意)。

Rust具有現(xiàn)代類型的系統(tǒng),該系統(tǒng)可以自動(dòng)管理內(nèi)存并與邊界檢查一起確保安全地對(duì)其進(jìn)行訪問。 它具有泛型和接近Haskell類型類的特征系統(tǒng)。 這實(shí)現(xiàn)了Rust所謂的零成本抽象:擁有出色的設(shè)計(jì)不應(yīng)損害性能。 James Munns在嵌入式編程方面的精彩演講描述了Rust嵌入式工作組如何構(gòu)建一組可重用的組件,以便在不犧牲執(zhí)行成本的情況下在微型芯片上對(duì)各種類型的硬件操作進(jìn)行抽象。

當(dāng)我深入研究Rust資源時(shí),從出色的Rust Book開始,然后在GitHub上尋找我可能感興趣的項(xiàng)目,我注意到這種毫不妥協(xié)的方法對(duì)社區(qū)和生態(tài)系統(tǒng)產(chǎn)生了多大影響。 Rust開發(fā)人員旨在獲得最佳的運(yùn)行時(shí)效率,最準(zhǔn)確的抽象和最強(qiáng)的執(zhí)行安全性。 顯然,它使Rust適用于低級(jí)編程,但對(duì)于許多更高層次的應(yīng)用程序也非常有趣:盡管人們可以在Rust中編寫Linux內(nèi)核模塊,但它也用于構(gòu)建REST Web應(yīng)用程序,區(qū)塊鏈節(jié)點(diǎn)甚至單頁(yè)Web WebAssembly中的應(yīng)用程序! 讓我們?cè)偕钊胍稽c(diǎn),看看它如何幫助編寫守法程序。

正確性

編寫正確的程序很困難。 我們要完成的任務(wù)通常含糊不清。 盡管如此,語(yǔ)言仍可以通過表現(xiàn)力十足而提供幫助,而無需程序員跳過障礙來提出問題。 Rust具有現(xiàn)代的語(yǔ)言結(jié)構(gòu):代數(shù)數(shù)據(jù)類型(在這里稱為枚舉),泛型,特征,類型別名,元組等。它還具有功能強(qiáng)大的元編程系統(tǒng),該系統(tǒng)使用宏可以完成繁重的工作,例如生成序列化程序 ,特征實(shí)現(xiàn)或定義嵌入式DSL。 同樣,Rust借鑒了Scheme和其后代Racket(它特別擅長(zhǎng)構(gòu)建DSL)的靈感,通過支持衛(wèi)生宏來借鑒了出色的想法。

正確性的另一部分是沒有不確定的行為,安全問題和墜毀風(fēng)險(xiǎn)。 Rust通過使類型系統(tǒng)意識(shí)到所有權(quán)來在沒有垃圾收集器的情況下管理內(nèi)存。 資源由一個(gè)單一的變量綁定擁有,并且可以通過將變量傳遞給函數(shù)來轉(zhuǎn)移所有權(quán):Rust稱其為移動(dòng)資源(在某種意義上類似于C ++的move語(yǔ)義)。

當(dāng)變量綁定超出其詞法范圍時(shí),它所擁有的資源將被刪除-又名,已釋放(可以通過將其移入遺忘而更早地刪除該值)。 盡管它們可以證明是'活著的',但可以借用共享的方式不變地或以排他的方式可變地借用價(jià)值。 這類似于C ++引用,但是它允許Rust編譯器證明不會(huì)對(duì)給定的數(shù)據(jù)結(jié)構(gòu)進(jìn)行共享,可變的訪問,并且開發(fā)人員不必?fù)?dān)心一件事。

最后但并非最不重要的一點(diǎn)是,Rust通過確保在線程之間不共享非線程安全值來保護(hù)開發(fā)人員免受許多并發(fā)問題的困擾。

有很多資源可以了解Rust的所有權(quán)和借用,但是我將展示一個(gè)簡(jiǎn)單的示例。 請(qǐng)注意,所有權(quán)的復(fù)雜性更高,特別是某些類型可以選擇復(fù)制而不是移動(dòng)的事實(shí)。 例如,'擁有'一個(gè)整數(shù)沒有意義,因?yàn)樗侨绱酥∫灾劣诳梢员缓?jiǎn)單地復(fù)制。 Rust編譯器也在不斷發(fā)展,變得更加智能,并允許更直觀的代碼。

在上面的代碼段中,創(chuàng)建了一個(gè)名為s的新字符串,并將其傳遞給函數(shù)foo。 因?yàn)閒oo接受一個(gè)String而不是對(duì)String的引用,所以它獲取了所有權(quán)而不是僅僅借用它:將String移到foo。 后來,仍然主要在嘗試打印s時(shí),Rust編譯器會(huì)抱怨資源s已綁定,因此不再可用。 該程序?qū)o法編譯。

事實(shí)證明,foo返回一個(gè)不變的s,但是編譯器不知道它,并且任何開發(fā)人員也不會(huì)只看主函數(shù),foo的簽名和String的特征。 知道這些元數(shù)據(jù)就足以知道foo擁有所有權(quán),而我們對(duì)該資源的訪問也會(huì)丟失。

為了使我們的程序編譯,我們可以簡(jiǎn)單地打印newS。 Rust甚至讓我們?cè)俅畏Q它為s,這很棒,因?yàn)闊o論如何將s傳遞給foo后,s都不可用! 下面的程序先打印' Bar',然后打印' Foo'。

查看foo,它還會(huì)在名為s2的變量下創(chuàng)建另一個(gè)String。 超出范圍時(shí)將被丟棄。 到目前為止,這看起來很像自動(dòng)內(nèi)存管理,用于在C ++中分配給堆棧上的結(jié)構(gòu)或Java中由GC管理的引用句柄。 區(qū)別在于,資源(例如堆?;蚨逊峙涞膬?nèi)存)始終只有一個(gè)所有者。

在這里,在foo中返回s2而不是s將把s2返回給調(diào)用者,程序?qū)⒋蛴? Bar'' Bar'。 順便說一句,如果您想知道為什么在調(diào)用println!之后s2仍然可以使用,那是因?yàn)樗莗rintln !! 只借了它! 最后,驚嘆號(hào)一目了然。 是一個(gè)宏。

最后,沒有必要在此處分配字符串,因?yàn)? Foo'和' Bar'常量已經(jīng)在二進(jìn)制文件中。 Rust可以直接指向那里并獲得我們可以借用的'切片'。 我們使用稱為&str的類型,它可以是借來的String或切片!

可維護(hù)性

所有權(quán)系統(tǒng)不僅使程序執(zhí)行安全,而且我認(rèn)為這也使代碼更易于維護(hù)和重用。 一目了然的功能或詞法范圍,Rust開發(fā)人員可以確定其變量的屬性。 他們可以構(gòu)建API,以更準(zhǔn)確地傳達(dá)應(yīng)如何使用它們,并從類型檢查器中尋求幫助。

讓我舉一些例子。 在C語(yǔ)言中,編譯器不知道函數(shù)返回的指針有效的時(shí)間。 在垃圾回收語(yǔ)言中,您可以存儲(chǔ)函數(shù)返回的所有引用,并防止釋放潛在的大塊內(nèi)存。 許多Java庫(kù)隨附文檔,描述了什么時(shí)候可以安全地調(diào)用哪些方法,對(duì)象將處于有效狀態(tài)的時(shí)間長(zhǎng)短,并通過異常強(qiáng)制執(zhí)行這些規(guī)則,或者讓您處理未定義行為的后果。 當(dāng)涉及多線程時(shí),這變得更加困難。 Rust使得可以返回在編譯時(shí)已知的給定生命周期內(nèi)可能有效的引用,提供副本或提供您愿意時(shí)可以處置的共享引用。

Rust附帶了Cargo,這是一個(gè)命令行實(shí)用程序,用于構(gòu)建,管理依賴項(xiàng)(稱為Crates),運(yùn)行測(cè)試,修復(fù)警告等。 擁有社區(qū)認(rèn)可的構(gòu)建工具意味著可以將精力集中在那里。 它有助于Cargo的開發(fā)人員做出不錯(cuò)的選擇,例如支持使用開箱即用的包裝箱進(jìn)行語(yǔ)義版本控制,使用人類可讀和可編輯的配置格式(TOML)或支持可復(fù)制的版本。 還有rustfmt,這是一種自動(dòng)格式化程序,可防止浪費(fèi)時(shí)間手動(dòng)格式化源文件以及關(guān)于tabs-vs-spaces的無休止的爭(zhēng)論(劇透警告:贏得了4個(gè)空格)。

盡管如此,Rust的工具仍在開發(fā)中。 Java開創(chuàng)了20年的先機(jī),但是語(yǔ)言本身非常適合工具。 IDE應(yīng)該如何在宏中支持DSL? 時(shí)間會(huì)證明一切。 有一個(gè)官方語(yǔ)言服務(wù)器,該服務(wù)器具有VSCode和Eclipse集成。 還有一個(gè)IntelliJ IDEA插件。

Rust編譯器得到LLVM的支持,LLVM是具有高效優(yōu)化器的成熟基礎(chǔ)架構(gòu)。 它也可以針對(duì)WebAssembly,這使Web應(yīng)用程序可以用Rust編寫,并且可以允許在沙箱中運(yùn)行不受信任的代碼。

效率

Rust速度很快,運(yùn)行速度可與C媲美。因?yàn)樗鼪]有垃圾收集器,所以沒有隱藏的成本-即使沒有停頓,GC代碼也會(huì)在單獨(dú)的線程中運(yùn)行并消耗資源。

由于注重效率,因此社區(qū)很容易為所有事情運(yùn)行基準(zhǔn)。 因?yàn)榇a共享既簡(jiǎn)單又安全,所以我們可以重用高性能的數(shù)據(jù)結(jié)構(gòu)。 Bryan Cantrill在最近的博客中比較了程序的C版本和Rust版本,并將40%的運(yùn)行時(shí)改進(jìn)歸因于使用了BTreeSet,這是Rust標(biāo)準(zhǔn)集合中的現(xiàn)成可用的高效數(shù)據(jù)結(jié)構(gòu)。

Rust使用戶可以控制其數(shù)據(jù)結(jié)構(gòu)的內(nèi)存布局,并使間接表達(dá)明確。 這不僅有助于編寫緩存友好的代碼,而且還可以與C接口。Rust的FFI與C一樣簡(jiǎn)單,沒有開銷,這使得調(diào)用任何系統(tǒng)原語(yǔ)都很容易(但不安全,應(yīng)適當(dāng)包裝)。 我們不愿意在Java中執(zhí)行此操作,特別是出于穩(wěn)定性方面的考慮-段錯(cuò)誤將使JVM崩潰-但這可能很有用。 例如,最快的Java Web服務(wù)器之一正在使用JNI調(diào)用Linux的epoll,并且似乎比Java的標(biāo)準(zhǔn)無阻塞網(wǎng)絡(luò)庫(kù)NIO更好。

說到這一點(diǎn),如果我們阻塞了一個(gè)等待IO的線程,那就太快了。 Rust具有零成本的期貨,包括無阻塞,反壓的流。 因?yàn)槠谪浐土麈溄涌赡茏兊煤苋唛L(zhǎng),所以可能已經(jīng)使用async / await編寫了慣用的Rust代碼之類的異步代碼。 現(xiàn)在,await被實(shí)現(xiàn)為一個(gè)宏,但是正在進(jìn)行使它成為標(biāo)準(zhǔn)Rust功能的工作。

Rust的旗艦無阻塞IO庫(kù)Tokio建立在期貨的基礎(chǔ)上,為無阻塞編程提供了一致且流暢的抽象。 Web框架使用Hyper HTTP庫(kù)依次使用Tokio。

在我看來,Rust的核心開發(fā)人員一直在積極尋求更好的想法,這是對(duì)Sun指導(dǎo)Java很久的'此處未發(fā)明'綜合癥的一種令人耳目一新的變化。 在這些好主意中,Rust的特性和缺乏結(jié)構(gòu)繼承性提供了出色的設(shè)計(jì)原語(yǔ),可幫助構(gòu)建模塊化且可維護(hù)的系統(tǒng)。

Rust開發(fā)人員在錯(cuò)誤處理方面有了另一個(gè)不錯(cuò)的選擇。 Rust具有Result <T,E>類型,可以是具有成功值的Ok(T)或具有錯(cuò)誤的Err(E)。 Haskell程序員將識(shí)別出兩種類型。 使用常規(guī)結(jié)構(gòu)處理錯(cuò)誤意味著可以使用所有常用的機(jī)制-包括模式匹配,將Result作為值傳遞或序列化它。

Rust還使用特質(zhì)使代碼不那么冗長(zhǎng)。 像Java的Iterable及其foreach循環(huán),或Haskell的monad表示法一樣,Rust除了特質(zhì)外還使用了一些健康的語(yǔ)法糖,可以輕松構(gòu)建自然的類型。

例如,當(dāng)嘗試使用+操作時(shí),將使用Rust的std :: ops :: Add特性。 運(yùn)算符重載在C ++中總是帶來負(fù)面影響,但這也是Python在數(shù)據(jù)分析方面如此強(qiáng)大的一個(gè)重要原因。 Numpy的數(shù)組和矩陣可以方便地支持我們?cè)诩埳鲜褂玫南嗤\(yùn)算符。 為了防止沖突,Rust僅允許定義特征的模塊或定義目標(biāo)類型的模塊實(shí)現(xiàn)特征。 這是進(jìn)行自定義Point類型支持匯總的簡(jiǎn)單示例。

社區(qū)與生態(tài)系統(tǒng)

可以看到Rust社區(qū)多年來為該語(yǔ)言及其生態(tài)系統(tǒng)做出的巨大努力。 他們使從Rust開始的體驗(yàn)非常愉快和熱情。 我發(fā)現(xiàn)了一種精神,使所謂的'銹病'變得動(dòng)人心魄。

Rust擁有官方論壇和討論渠道,您可以在其中獲得幫助,并可以與核心開發(fā)人員討論技術(shù)問題。 一切都是公開開發(fā)和辯論的,歡迎貢獻(xiàn)。

每周時(shí)事通訊會(huì)提供更新和不斷改進(jìn)的感覺。 它選出了'每周一箱',以宣傳社區(qū)的努力。 它要求就問題進(jìn)行幫助,有時(shí)甚至在Rust官方發(fā)行版中也是如此。

Rust社區(qū)在GitHub上非?;钴S,并將許多問題標(biāo)記為任何想成為貢獻(xiàn)者的'第一好問題'。 實(shí)際上,Rust中沒有像Apache或Eclipse這樣的開源基金會(huì),但是有很強(qiáng)的自由軟件文化。 Mozilla提供了Rust的贊助-許多核心開發(fā)人員都是Mozilla的雇員-但隨后許多大型項(xiàng)目仍然存在于單獨(dú)的GitHub帳戶上。

社區(qū)仍然很緊張,每個(gè)人都在共同努力以建立一個(gè)完整的生態(tài)系統(tǒng)。 為了安全起見,Rust開發(fā)人員基本上重寫了所有內(nèi)容,以盡可能地依賴Rust代碼而不是包裝的C,C ++或Go庫(kù)。

開發(fā)人員可以將其包裝箱發(fā)布到crates.io。 Rust標(biāo)準(zhǔn)庫(kù)很小,甚至是可選的,通過設(shè)計(jì),大多數(shù)常用功能的開發(fā)(例如期貨,序列化或日志記錄)都發(fā)生在不同的包裝箱中。 一些包裝箱是通過RFC流程標(biāo)準(zhǔn)化的。

由于其品質(zhì)和社區(qū),Rust吸引了很多人才。 Rust具有出色的密碼學(xué)生態(tài)系統(tǒng),用于并發(fā)和數(shù)據(jù)并行性的庫(kù)。 您可能對(duì)使用QUIC感興趣嗎? 有一個(gè)圖書館! 您是否在考慮Haskell的Quickcheck? 校驗(yàn)! 還是模糊測(cè)試? GTK +用戶界面? 沒問題! 您喜歡GraalVM嗎? 魯斯特有HolyJit! Nom和Pest是用于解析的兩個(gè)庫(kù)。 人們?cè)赗ust中編寫OpenGL視頻游戲,其他人則編寫網(wǎng)絡(luò)服務(wù)或WebAssembly VM。

文章圖片2

未來

Rust通過啟用零成本抽象并將混合好的,經(jīng)過驗(yàn)證的想法與提供免費(fèi)內(nèi)存安全性的新穎方法相結(jié)合,創(chuàng)造了新的交易。 它通過允許高級(jí)構(gòu)造來重塑系統(tǒng)編程,并可靠地提供了高級(jí)編程速度和控制能力。

但是,人們之所以選擇語(yǔ)言和框架是因?yàn)樗鼈兙哂猩a(chǎn)力,并且可以保證達(dá)到特定的目的。 如果要構(gòu)建Web應(yīng)用程序,則Ruby on Rails或Java是安全的選擇。

我個(gè)人對(duì)Java的整體工程質(zhì)量,工具,生產(chǎn)率和舒適度感到迷戀。 Rust在那里顯然不那么成熟,但是我將押注社區(qū)的動(dòng)態(tài)變化,以及更多采用Rust并幫助使其成為世界一流編程環(huán)境的公司。

幾年后,Rust可能會(huì)提供一個(gè)生產(chǎn)效率高,安全的編程環(huán)境,感覺像今天的Java一樣可靠且無風(fēng)險(xiǎn)。 最有趣的部分是到達(dá)那里。

(本文翻譯自Simon Chemouil的文章《Rust and the Three Laws of Informatics》,參考:
https://blog./rust-and-the-three-laws-of-informatics-4324062b322b)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多