Rust與Go在區塊鏈中的應用比較 - definoobs

banq 發表於 2022-11-07
區塊鏈 Go

雖然Go和Rust並不是最流行的程式語言,但它們經常被那些考慮在區塊鏈中使用的人比較。

畢竟,這兩種語言都是在上世紀80年代和20年代出現的少數語言之一,使它們在過去兩個世紀才涉足的語言海洋中脫穎而出。

當Golang與Rust被徹底研究後,就會發現這兩種語言有驚人的相似性。

從我們的六個不同類別來看,Rust似乎比Go有更多的優勢。然而,加密原語在Go中得到了更好的支援。它包括本地庫、OpenSSL包裝器和新的Tink庫。

至少,Go的標準庫隱藏了許多危險的方法,如分組操作,這使得原型設計有趣的想法變得很痛苦(是的,你可以用各種方式覆蓋)。

先在每種語言中完成一些加密挑戰,看看你喜歡哪一種。

在這篇文章中,我們將比較和對比Rust和Go作為區塊鏈程式語言。

區塊鏈的Rust與Go的對比
我假設你對學習如何在Go vs. Rust中實現加密演算法和協議感興趣,而不是如何使用高階庫。

在實現低階演算法方面,這些語言之間似乎沒有什麼區別。都是同樣的算術和邏輯運算,這裡和那裡有一些語言上的怪癖。

對於高效能(和高安全性)的應用來說,你的庫往往只是一個美化的包裝,圍繞著彙編。

Rust有一些好處,可以幫助減少模板(最明顯的是它的宏系統),以及與C庫的零成本互操作性(與Go不同),但沒有革命性的東西。

然而,Go在這裡有一個優勢,因為谷歌可以簡單地僱用全職的密碼學工程師來建立一個世界級的最常見的演算法的實現(AFAIK,Go的標準中的密碼學演算法的實現嚴重依賴於手動編寫的彙編)。

這兩種語言的主要區別在於型別系統的力量。
一個好的型別系統可以幫助實現互操作性,甚至可以透過編碼在編譯時檢查的各種不變數來提高效能(例如,透過允許編譯器消除執行時檢查)。
在這方面,我相信Rust已經遠遠領先於Go,並且還在繼續改進(例如,很快,我們就會有穩定的常量泛型MVP)。
例如,在RustCrypto中,trait crates包含各種演算法家族的 "介面"。
在org中幾乎所有的演算法實現(以及一些第三方的實現)都是按照這些特質來寫的,允許你像樂高積木一樣交換演算法和組合演算法,而不需要去挖掘原始碼。
如果你想支援那些沒有被廣泛使用的演算法(例如,區域標準或新開發的演算法),這個特性就特別重要。

當然,Rust的加密生態系統還包括 "傳統 "的庫,如OpenSSL/libsodium包裝器、作業系統加密提供者,以及最引人注目的ring。
Ring大量借用了BoringSSL(谷歌對OpenSSL的分叉)的程式碼,故意限制了支援的演算法數量,並被Rustles使用,其效能已經超過了OpenSSL。

Golang和Rust的概述
看看這個Golang和Rust的並排比較。這樣一來,你就可以確定你所選擇的語言的功能得到了最大的發揮。

1、效能
Go和Rust都對其效能指標給予了高度評價。作為新的語言,關鍵是它們不僅要有良好的效能,而且要比以前的語言有更好的效能。

儘管這兩種語言由於其功能設定而顯得比其他語言更快,但現在重要的是要知道它們的比較。

一個簡單的基準測試表明,Rust在各種任務中都優於Go。

Rust在速度和效能方面都超過了Go。

2、特性
Rust的一長串特性,如零成本抽象、錯誤資訊、移動語義、資料競爭預防、模式匹配等等,使Go的關鍵特性如二進位制檔案和包管理相形見絀。

Golang和Rust的比較顯示,Rust的功能比Go多。Rust取得了勝利。

3、開發的便利性和速度
Go的可讀性使其簡單易學,所以編碼應該是輕而易舉的。

相比之下,在Rust中,諸如借用和所有權等高階概念使該語言更難掌握。Rust並不害怕承認它有一個陡峭的學習曲線。

Go比Rust更方便使用者使用。Go贏了。

4、維護
你需要做的所有事情都包括在維護中,以確保你的程式正常執行並將繼續執行。

總而言之,維護你的程式碼庫在Go中會比在Rust中更容易,因為Go程式碼更簡單。

由於其複雜性,Go的維護將比Rust簡單。Go贏了。

5、社群
開源語言通常有大型的支援社群。開發者社群在幫助新加入語言的人學習其功能和最佳實踐方面發揮著重要作用。

當然,確定一個社群的支援並不是一門精確的科學。然而,許多博主不斷讚美Rust社群的力量,這是其永續性的一個很好的指標。

Rust和Golang都有強大的社群,但在這場Golang與Rust的對決中,Rust的社群得到的關注最多。簡單地說,Rust是贏家。

6、受歡迎程度
很難衡量Go和Rust等年輕語言的受歡迎程度。

Rust和Go無法與JavaScript、Python或Java等經典語言的受歡迎程度相提並論,儘管你已經看到了所有的功能和好處。

根據Stack Overflow的資料,Rust和Go只有不到10%的開發者在使用。儘管如此,Go在頂級語言中排名第14,而Rust則排名第26。

這些排名是基於2021年1月的TIOBE指數,該指數考慮了各種因素,如流行的搜尋引擎、電腦科學課程和熟練工程師的意見。

談到Golang與Rust,Go更受歡迎。

現在讓我們深入瞭解一下這兩種語言:
Golang到底是什麼,什麼時候使用它?
Go是一種靜態型別的、已編譯的程式語言,通常被稱為 "Golang"。

這種語言是由谷歌開發人員建立的,基於C語言,目的是與C++競爭。由於其簡單的語法,Golang被比作Python。
因為Go是靜態型別的,所以變數的宣告必須遵守更嚴格的準則。
更好的錯誤檢測,特別是在涉及到語法的時候,是這種限制性行為的一個好處。編譯器通常使用靜態型別檢查來實現這一效果。
在執行之前,編譯語言被轉換(或編譯)為機器程式碼。因此,一般來說,編譯語言要比解釋語言快。
可編譯語言還能讓你對硬體有更多控制。記憶體管理和多執行緒是Go的突出特點,此外還有語言的有意設計。
確保有效記憶體管理的一個Go元件是垃圾收集。

缺乏記憶體安全是C語言的缺點之一,Go希望能解決這個問題。另一方面,Go語言使用垃圾收集器在管理堆中分配記憶體。
簡單來說,這意味著未使用的記憶體被用來儲存新的物件,而未使用的物件則被從記憶體中 "扔掉"。垃圾收集程式執行得更快,因為它們不會有任何記憶體洩漏。

什麼時候使用Golang是合適的?
Go可以用於各種各樣的專案。在2021年的調查結果中,Web開發、區塊鏈、資料庫和網路程式設計被列為Go的主要使用案例。

大多數Go開發者認為,Go對網路服務的親和力源於其併發能力。

Go經常被認為是後端網路開發的最佳語言。快速的網頁執行對於在網上建立品牌知名度的關鍵,其方式比你想象的要多。

谷歌雲平臺也得到了該語言的正式支援。

谷歌雲提供了許多依靠雲端計算概念來運作的服務。因此,Go在涉及高效能雲端計算應用時大放異彩。


什麼是Rust,什麼時候應該使用它?
Rust是一種經過編譯的靜態型別的程式語言,支援各種程式設計正規化。

該語言的建立是為了優先考慮安全和效能,其主要目標是確保安全的併發性。

Rust在語法上與C++相似。Rust與Go或C++不同,沒有垃圾收集;相反,它依靠借貸檢查器來確保記憶體安全。

借貸檢查器確保資料所有權規則得到遵守,並避免資料競賽。兩個或多個指標訪問同一個記憶體位置被稱為資料競賽。

Rust是為一種叫做程式設計的特殊型別的編碼而建立的。這種型別的程式設計需要大群或小群的人在一起工作很長時間。

Rust致力於適應和鼓勵高度併發和高度安全的系統,以允許這種型別的程式設計。

2006年,Mozilla員工開始試驗後來成為Rust的東西。Rust現在被用於Firefox瀏覽器的關鍵部分,在其穩定釋出三年後。

何時使用Rust?
Rust幾乎可以在任何地方使用。然而,有些地方比其他地方更適合。

例如,系統程式設計是一個Rust擅長的領域,因為它具有高質量的效能和零成本的抽象性。系統程式設計師是與開發過程中的硬體方面緊密合作的軟體工程師。

Rust有一些中間層的功能並不奇怪,因為它的靈感來自C++。中級語言是低階語言和高階語言之間的一種機會主義的妥協。

因為它們可以處理硬體方面管理記憶體所需的複雜程度,所以它們經常被用來建立作業系統和計算機應用程式。

儘管缺乏抽象性,但它們可以被人眼閱讀,這在機器程式碼中是不常見的。