header-langage
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
掃碼下載APP
Partnered With:

Rust 是什麼,有哪些知名區塊鏈項目是用 Rust 開發的?

閱讀本文需 29 分鐘
Parity、Polkadot、Grin、Nervos 等項目有什麼共同點?它們都是用 Rust 語言開發的。

原文標題:《Rust 今天 4 歲啦, 爲什麼越來越多的知名項目用 Rust 來開發?》
原文來源:區塊鏈大本營 作者:Mike Tang


4 年前的今天(2015 年 5 月 15 日),Rust 編程語言核心團隊正式宣佈發佈 Rust 1.0 版本。

4 年來,它優雅的解決高併發和高安全性系統問題的能力,受到了越來越多開發者的喜愛。並且連續 4 年,在 Stack Overflow 開發者「最受喜愛編程語言」評選中獲得第一名。


640?wx_fmt=png

近來,越來越多的著名區塊鏈項目已經選擇使用 Rust 作爲其開發語言,包括:Parity、Polkadot、Substrate、Grin、Ethereum 經典、Holochain、Cardano-Rust、Exonum、Lighthouse、Nimiq、Nervos、Conflux-Rust、Codechain、Witnet 等衆多知名度較高的項目。

本文試圖探討這一種趨勢出現背後的原因。並且系統的講解 Rust 語言對於區塊鏈開發的影響和其優勢。

Rust:一個安全和併發的軟件系統

Rust 是一門系統級編程語言,被設計爲保證內存和線程安全,防止段錯誤產生。

作爲系統級編程語言,它的基本理念是「零開銷抽象」。理論上來說,它的速度與 C / C++ 同級。Rust 可以被歸爲通用的、多範式、編譯型的編程語言,類似 C/C++。

與這兩門編程語言不同的是,Rust 是線程安全的!它的目標是,創建一個安全和併發的軟件系統。Rust 強調安全性、併發和內存控制。儘管 Rust 借用了 C/C++ 的語法,卻杜絕了空指針和懸掛指針,而這二者是 C/C++ 中系統崩潰、內存泄露和不安全代碼的根源。

雖然 Rust 是一門系統級編程語言,但並不意味着它只能寫底層程序(操作系統、驅動、工具、數據庫、搜索引擎等),它的抽象層次之高完全給人驚豔的感覺,實踐證明它對問題建模的能力和方便性不比 C++/Java/Python/Ruby 差。

但 Haskell 這類超高抽象語言,也不是 Rust 的發展方向。Rust 力求在抽象與現實世界中找到一個平衡。

目前,Rust 已經在 StackOverflow 的年度語言評選中,連續 4 年榮獲「程序員最喜愛語言」第一名。

Rust 語言的歷史

Rust 最早是 Mozilla 僱員 Graydon Hoare 的一個個人項目,從 2009 年開始,得到了 Mozilla 研究院的支助,2010 年項目對外公佈。

2010 ~2011 年間實現的自舉。從此以後,Rust 經歷了巨大的設計變化和反覆(歷程極其艱辛),終於在 2015 年 5 月 15 日發佈了 1.0 版。

在這個研發過程中,Rust 建立了一個強大活躍的社區,形成了一整套完善穩定的項目貢獻機制(這是真正的可怕之處)。Rust 現在由 Rust 項目開發者社區維護。

下圖描述了 Rust 的基因圖譜:


640?wx_fmt=png

Rust 仍是小衆語言

Rust 從 1.0 算起,到目前(2019 年 5 月)爲止,已有長足的發展。但整體而言,比起,Python、C、C++ 等,Rust 的使用並不算特別廣泛(畢竟太年輕)。

調查顯示,Rust 使用率不高的很大一部分原因是選擇 Rust 的公司佔少數。


640?wx_fmt=png

不過,Rust 在工作中的佔比卻越來越高。過去一年間,Rust 在商業應用上有着令人驚訝的成長。包括一些人們耳熟能詳的公司:

亞馬遜:用 Rust 構建工具;

Facebook:源代碼控制工具;

Google:作爲 Fuchsia 項目的一部分;

微軟:在新的 Azure 物聯網框架中部分使用 Rust;

Twitter:用 Rust 作爲構建團隊支持的一部分。

國內的百度、阿里,也已經在內部小範圍的使用上了 Rust。相信,隨着更多公司對 Rust 的選擇,Rust 的成長速度將更加迅猛。

Gavin Wood 把 Rust 帶進區塊鏈

第一個將 Rust 應用於著名區塊鏈項目的應該是大名鼎鼎的 Gavin Wood。Gavin Wood 博士在 2015 年下半年離開了以太坊社區,創立了 Parity Technologies,推出以太坊(Ethereum)客戶端 Parity,成功佔領以太坊社區的半壁江山。而這個 Parity 客戶端就是使用 Rust 寫的。


640?wx_fmt=png

實際在 Parity 出現之前,MaidSafe 項目就已經出現了。MaidSafe 用 Rust 語言嘗試了很多東西。Rust 語言本身強調的安全性以及 MaidSafe 這些前沿項目,可能給了 Gavin 充分的理由選擇 Rust 作爲 parity 開發語言。


640?wx_fmt=png

Rust 本身的語言特性(安全、高性能、併發編程)與區塊鏈的特性(分佈式、加密、安全敏感)天生有相當大的重合性。

不僅如此,Rust 作爲一個編程語言顯得不同,不是因爲它的語法多麼漂亮(實際有些人甚至覺得有點醜)或者社區多麼受人歡迎,而是因爲當用它寫代碼時獲得的那種信心。

看起來 Rust 會影響你寫代碼的的效率和表達力,但令人相當驚奇的是,結論完全相反:寫一個有效率的、符合習慣的 Rust 程序比寫一個有潛在危險的程序容易得多。

下面是 Linux 內核在 2018 年一月到四月期間發現的 bug:


640?wx_fmt=png

而對於 Rust 而言,上圖右側佔比 51% 的部分,從語言層面就可以避免。也就是說,對 Rust 來說,根本不存在上圖右邊這些問題。

目前有兩種觀點:「一個人只需要知道如何寫 C」和「只需要把最底層的東西留給專業人士」,這兩種觀點都是不夠的。Linux 內核是由強中強的程序員寫的,可能是工業界最前面的 5% 的程序員,但是,仍然,年復一年地搞出 CVE 來。

你有可能會覺得幾百萬行代碼中出現 50 個 bug 不算什麼。但在一些關鍵領域,出 bug 就意味着系統性風險(如,心臟起博器中的 bug 會導致生命危險)。而且,這 50 個 bug 是我們已經找到的,誰知道我們還有多少個 bug 還沒找到?而用了 Rust,我們可以事先知道答案。

厲害的是,Rust 在實現內存安全和併發安全的同時,並沒有以損失性能爲代價。更牛逼的是,它甚至是用同一套抽象解決了內存安全和數據競爭這兩個不同領域的問題。

Rust 的零開銷抽象讓你在享受安全性的同時,又不損失性能。這正是傳統的程序員夢寐以求的。

以 Parity 爲例,Parity 使用 Rust,正是因爲用 Rust 寫複雜和高性能的代碼時,不用擔驚受怕。用 Rust 寫程序,遠離未定義行爲、數據競爭和內存安全問題。更別說,Rust 運行速度快,寫起來有趣,易讀,還幾乎沒有運行時。

內存安全問題如此困難,因爲你無法容易地寫出測試來捕獲它們。如果你在 beta 階段之前沒有找出 bug,那麼這個 bug 就可能會在代碼中呆幾年,就像一個讀秒的定時炸彈。當然,也有 Valgrind 這類的工具,來輔助你捕獲這些 bug。但是如果在執行時,沒有觸發內存問題,或這類工具生成的代碼在運行時,沒有執行,那麼它們也捕獲不到。

所以,通過使用 Rust,我們消除了一大類最複雜和最不可預測的錯誤。

Rust 中內嵌了形式化證明理論,不過僅限於對內存安全和併發。Rust 在內部用邏輯證明了你的程序是正確的。這也就是你爲什麼寫 Rust 代碼會寫得如此有信心的原因。你的每一次編譯,都有一組數學理論在爲你提供證明服務。

在很長一段時間內,像 Haskell 這種函數式編程語言的一大殺手級特性就是可以比較容易地進行形式化證明,而這對於傳統的命令式編程語言是不可能的(因爲有共享可變性,不安全的指針運算,和不可控的副作用)。

但 Rust 的出現,改變了這種情況,作爲一個命令式語言,它卻走在被證明的路上。到目前爲止,標準庫的一部分已經被證明是正確的。


640?wx_fmt=png

那些用 Rust 開發的知名區塊鏈項目

奇偶校驗

說起知名的用 Rust 寫的區塊鏈項目,Parity 首當其衝。Parity 是一個以太坊節點客戶端 parity-ethereum。


640?wx_fmt=png

Parity Technologies 是他們公司的名稱。現在 Parity 旗下已經包含了一套客戶端和各種庫,包括:

parity-ethereum;

parity-zcash;

parity-bitcoin;

shasper。

也就是說,Parity Technologies 給使用 Rust 開發區塊鏈提供了一套「全家桶」。

polkadot / substrate

Polkadot 是由 Web3 基金會發起的一項計劃,由 Parity Technologies 負責開發,旨在卻不限於使區塊鏈互聯。

Polkadot 使開發者和企業能夠利用其協議建立區塊鏈,即平行鏈(parachain)。只要這些平行鏈建立在 Polkadot 的基礎之上,它們將共享同樣的權威證明(PoA)共識。

由於該類型共識嵌於 Polkadot 中,平行鏈開發者可以專注於各自區塊鏈的特異性。所有平行鏈都和一種被稱爲中繼鏈(relay chain)的通用區塊鏈無縫連接,後者扮演連接所有平行鏈的角色。

Polkadot 項目由 Gavin Wood 主導推進,其實跟上面的 parity 全家桶屬於同一家公司,但屬於不同的團隊在做。

如果你實時關注了 Polkadot 的進展狀況,你可能會經常看到「Substrate」這個詞。它是 Polkadot 項目的重要組成部分。Parity Substrate 是獨立於 Polkadot 的項目。Polkadot 基於 Substrate,其它基於 Substrate 的項目也能在 Polkadot 網絡上運行(形成一個生態)。

那麼什麼是 Substrate 呢?你可以將其看作類似於 Express 或其他 Web 應用程序的框架,但它是用於構建分佈式或去中心化的系統的框架,可以構建例如加密貨幣項目,或消息總線系統。

正如大多數 Web 應用程序不需要重新實現自己的 HTTP 協議一樣,對於每一個團隊創建新鏈時,也不需要從頭實現網絡和共識的代碼,這浪費精力。

更不用提爲了實現業務邏輯,必須僱用密碼學家、安全研究員、網絡工程師、開發人員(以協調更新)等等了。如果你使用 Substrate 來構建一個新項目,只需要在代碼中實現少量的函數回調,就可以輕鬆快速創建一條鏈。

*參考鏈接:

https://github.com/paritytech/polkadot
https://github.com/paritytech/substrate


露齒而笑

grin 是當今區塊鏈界小網紅。少數旨在成爲真正貨幣的項目之一。

Grin 致力於提供隱私、可擴展性的加密貨幣,計劃在 2019 年初發布。其幾個獨特的屬性:使用名爲 MimbleWimble 隱私保護區塊鏈格式;只在區塊鏈中存儲少量數據,運行完整節點既便宜又容易。

Mimblewimble 由匿名人士開發,團隊分佈在世界各地;沒有任何預挖的 PoW 機制,更平等和去中心化。


640?wx_fmt=png

Grin 核心開發者、Grin Council 成員 D

grin 的出現,預示着迴歸比特幣的一股潮流的出現,也許,這纔是這一類項目正確的方向。

參與 gin 的開發交流,相當令人愉悅。

holochain

Holochain 致力於解決 Dapp 落地的事情,也就是說,它在構建一個雲託管網絡。

當人們都在研究如何把區塊鏈性能提高的時候,Holochain 卻在做造汽車的事。有時候思維固化並非好事,換一種思維方式或許就可以找到解決問題的新路徑。正如 Holochain 官網上的文字一樣:Think outside the blocks。

Holochain 這個項目很有意思,它不是狹義上的區塊鏈。人們研究區塊鏈本質上是在研究通過解決信任問題完成價值傳輸,從而完成生產關係改變。

爲了達到最終目的,我們不一定要把眼光僅限於某種特定技術上。無論是區塊鏈、DAG、Holochain,只要能達到我們最終目的,那麼都可以認爲是好的技術。

區塊鏈中爲了保證信息一致性,系統中每個節點都是一個單獨的賬本,這些賬本記錄同樣的信息。雖然,區塊鏈這種分佈式賬本技術滿足了一致性,但卻造成了巨大的信息冗餘。

Holochain 認爲共識是可以分化的,沒必要所有的事件都去共識。因此它創新的從另一個角度去解決共識問題。Holochain 將一個賬本分割成若干份,交給每一個參與節點,並通過 DHT 技術和密碼學技術保證賬本之間的一致性。

簡單來說,我們可以把 DHT 的作用理解爲拼圖上的圖畫,我們可以通過圖畫來判斷這個拼圖是否完整。

節點不再需要多賬本同步記錄,只需要記錄與自身相關的內容就可以達成全網共識,這就是 Holochain 的革新之處。

神經

首先,Nervos 要做什麼?官網上說,Nervos 是要:爲未來的加密經濟構建分層的基礎設施。分層的方式也是現在區塊鏈主流體系設計,Layer 1 發行原生資產,支持高安全性高去中心化,犧牲效率。

而 Layer 2 去做擴容的事情。那麼 Nervos CKB 作爲體系的 Layer 1,主要有以下兩個目的:資產的儲存和協議的增強(安全性和去中心化)。

注意,這也是 Nervos CKB 經濟體系設計的原則,即資產儲存大於價值交換。

Nervos 有幾個有趣的設計亮點:

解決通縮與通脹的問題;

解決手續費的問題 Nervos CKB 的一個理念是,智能合約平臺的價值除了原生代幣外,還應包含平臺上發行的其他加密資產的價值;

解決資源的價格問題;

解決利率的發現與調整問題。

exonum

由 Bitbury 出品。是一套使用 Rust 開發的許可鏈開發框架。使用 exonum,可以方便的搭建聯盟鏈。

結束語

作爲一個剛剛 4 歲的語言(今天 2019 年 5 月 15 日,是 Rust 語言正式發佈 4 週年生日),Rust 語言正在 IT 工業各個領域快速發展,而由於區塊鏈本身的特質,區塊鏈領域是較早接納 Rust 的領域之一。

在區塊鏈領域,Rust 正以勢如破竹之勢佔領區塊鏈新興項目市場,很多著名的老項目也在考慮轉向使用 Rust 重寫。

與此同時,WebAssembly 技術的飛速發展帶來的成果也及時地應用到了區塊鏈中。Rust 對 WebAssembly 提供了一等支持。可能是所有語言中目前爲止最好的。具體請參考:

https://rustforce.net/article?id=6807cc27-0e6c-4bc9-baa3-8b0c68ae9529

相信,隨着 Rust 語言的 async/await 特性在今年的穩定,使用 Rust 進行區塊鏈開發會變成更加輕鬆方便。選擇使用 Rust 作爲第一開發語言的區塊鏈項目也會越來越多,我們會迎來一波的 Rust 語言學習高潮。

謹以本文作爲 Rust 4 週年的生日禮物,祝 Rust 生日快樂!

*關於作者:

Mike Tang,資深程序員,Rust 語言愛好者,從 14 年下半年接觸 Rust,Sapper Web 框架主要作者。從 18 年開始聚焦於區塊鏈領域的學習研究,參與貢獻 cita,rust-libp2p,grin 等項目。

參考資料:

https://rustforce.net.cn/section?id=17dd744e-429a-42b1-8d30-01d31d556ab0
https://www.jianshu.com/p/cca7e4f46b86
https://www.parity.io/why-rust/

原文鏈接:mp.weixin.qq.com




歡迎加入律動 BlockBeats 官方社群:

Telegram 訂閱群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方帳號:https://twitter.com/BlockBeatsAsia

選擇文庫
新增文庫
取消
完成
新增文庫
僅自己可見
公開
保存
糾錯/舉報
提交