2015年5月15日,Rust編程語言核心團隊正式宣布發布Rust 1.0版本。
4年來,它優雅的解決高并發和高安全性系統問題的能力,受到了越來越多開發者的喜愛。并且連續4年,在Stack Overflow開發者「最受喜愛編程語言」評選中獲得第一名。
近來,越來越多的著名區塊鏈項目已經選擇使用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的基因圖譜:
Rust仍是小眾語言
Rust從1.0算起,到目前(2019年5月)為止,已有長足的發展。但整體而言,比起,Python、C、C++ 等,Rust 的使用并不算特別廣泛(畢竟太年輕)。
調查顯示,Rust 使用率不高的很大一部分原因是選擇 Rust 的公司占少數。
不過,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寫的。
實際在 Parity 出現之前,MaidSafe項目就已經出現了。MaidSafe用 Rust 語言嘗試了很多東西。Rust語言本身強調的安全性以及MaidSafe這些前沿項目,可能給了 Gavin 充分的理由選擇 Rust 作為 parity 開發語言。
Rust本身的語言特性(安全、高性能、并發編程)與區塊鏈的特性(分布式、加密、安全敏感)天生有相當大的重合性。
不僅如此,Rust作為一個編程語言顯得不同,不是因為它的語法多么漂亮(實際有些人甚至覺得有點丑)或者社區多么受人歡迎,而是因為當用它寫代碼時獲得的那種信心。
看起來Rust會影響你寫代碼的的效率和表達力,但令人相當驚奇的是,結論完全相反:寫一個有效率的、符合習慣的Rust程序比寫一個有潛在危險的程序容易得多。
下面是Linux內核在2018年一月到四月期間發現的Bug:
而對于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的出現,改變了這種情況,作為一個命令式語言,它卻走在被證明的路上。到目前為止,標準庫的一部分已經被證明是正確的。
那些用Rust開發的知名區塊鏈項目
parity
說起知名的用Rust寫的區塊鏈項目,Parity首當其沖。Parity是一個以太坊節點客戶端parity-ethereum。
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是當今區塊鏈界小網紅。少數旨在成為真正貨幣的項目之一。
Grin 致力于提供隱私、可擴展性的加密貨幣,計劃在 2019 年初發布。其幾個獨特的屬性:使用名為 MimbleWimble 隱私保護區塊鏈格式;只在區塊鏈中存儲少量數據,運行完整節點既便宜又容易。
Mimblewimble 由匿名人士開發,團隊分布在世界各地;沒有任何預挖的 PoW 機制,更平等和去中心化。
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 要做什么?官網上說,Nervos 是要:為未來的加密經濟構建分層的基礎設施。分層的方式也是現在區塊鏈主流體系設計,Layer 1 發行原生資產,支持高安全性高去中心化,犧牲效率。
而 Layer 2 去做擴容的事情。那么 Nervos CKB 作為體系的Layer 1,主要有以下兩個目的:資產的儲存和協議的增強(安全性和去中心化)。
注意,這也是 Nervos CKB 經濟體系設計的原則,即資產儲存大于價值交換。
Nervos有幾個有趣的設計亮點:
解決通縮與通脹的問題;
解決手續費的問題Nervos CKB 的一個理念是,智能合約平臺的價值除了原生代幣外,還應包含平臺上發行的其他加密資產的價值;
解決資源的價格問題;
解決利率的發現與調整問題。
exonum
由 Bitbury 出品。是一套使用Rust開發的許可鏈開發框架。使用exonum,可以方便的搭建聯盟鏈。
結束語
作為一個剛剛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生日快樂!
-
編程語言
+關注
關注
10文章
1950瀏覽量
34955 -
Rust
+關注
關注
1文章
230瀏覽量
6650
原文標題:為什么Rust連續4年獲“最受喜愛編程語言”?
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論