0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為什么Rust連續(xù)4年獲“最受喜愛編程語言”?

WpOh_rgznai100 ? 來源:YXQ ? 2019-05-29 10:28 ? 次閱讀

2015年5月15日,Rust編程語言核心團隊正式宣布發(fā)布Rust 1.0版本。

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

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

本文試圖探討這一種趨勢出現背后的原因。并且系統的講解Rust語言對于區(qū)塊鏈開發(fā)的影響和其優(yōu)勢。

Rust:一個安全和并發(fā)的軟件系統

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

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

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

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

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

目前,Rust 已經在 StackOverflow 的年度語言評選中,連續(xù) 4 年榮獲“程序員最喜愛語言”第一名。

Rust語言的歷史

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

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

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

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

Rust仍是小眾語言

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

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

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

亞馬遜:用 Rust 構建工具;

Facebook:源代碼控制工具;

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

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

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

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

Gavin Wood把Rust帶進區(qū)塊鏈

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

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

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

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

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

下面是Linux內核在2018年一月到四月期間發(fā)現的Bug:

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

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

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

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

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

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

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

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

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

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

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

那些用Rust開發(fā)的知名區(qū)塊鏈項目

parity

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

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

parity-ethereum;

parity-zcash;

parity-bitcoin;

shasper。

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

polkadot/substrate

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

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

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

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

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

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

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

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

鏈接:

https://github.com/paritytech/polkadot

https://github.com/paritytech/substrate

grin

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

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

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

Grin 核心開發(fā)者、Grin Council 成員 D

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

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

Holochain

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

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

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

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

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

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

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

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

Nervos

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

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

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

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

解決通縮與通脹的問題;

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

解決資源的價格問題;

解決利率的發(fā)現與調整問題。

exonum

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

結束語

作為一個剛剛4歲的語言,Rust語言正在IT工業(yè)各個領域快速發(fā)展,而由于區(qū)塊鏈本身的特質,區(qū)塊鏈領域是較早接納Rust的領域之一。

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

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

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

相信,隨著Rust語言的 async/await 特性在今年的穩(wěn)定,使用Rust進行區(qū)塊鏈開發(fā)會變成更加輕松方便。選擇使用Rust作為第一開發(fā)語言的區(qū)塊鏈項目也會越來越多,我們會迎來一波的Rust語言學習高潮。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 編程語言
    +關注

    關注

    10

    文章

    1922

    瀏覽量

    34510
  • Rust
    +關注

    關注

    1

    文章

    228

    瀏覽量

    6528

原文標題:為什么Rust連續(xù)4年獲“最受喜愛編程語言”?

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何用Rust編寫一個ChatGPT桌面應用(保姆級教程)

    用IDEA開發(fā)的java仔) 安裝 Rust 語言工具鏈:首先,請確保你已安裝了 Rust 編程語言工具鏈,包括
    的頭像 發(fā)表于 09-25 11:19 ?237次閱讀
    如何用<b class='flag-5'>Rust</b>編寫一個ChatGPT桌面應用(保姆級教程)

    PLC的編程方式及編程語言

    在工業(yè)自動化領域,PLC(Programmable Logic Controller,可編程邏輯控制器)因其強大的控制功能和靈活的編程方式而得到了廣泛應用。PLC的編程方式和編程
    的頭像 發(fā)表于 06-27 14:08 ?502次閱讀

    PLC編程語言和C語言的區(qū)別

    在工業(yè)自動化和計算機編程領域中,PLC(可編程邏輯控制器)編程語言和C語言各自扮演著重要的角色。盡管兩者都是
    的頭像 發(fā)表于 06-14 17:11 ?2088次閱讀

    Linux 6.10集成RISC-V更新,支持Rust編程語言

    本次補丁升級中,Linux內核進一步擴展了對應于RISC-V架構的Rust編程語言支持。在此之前,Rust已可應用在x86_64、龍芯LoongArch以及ARM64等多種架構之上。
    的頭像 發(fā)表于 05-23 17:16 ?841次閱讀

    在Aurix Tc375Lk上使用Rust編程語言可以嗎?

    您好,如果我想在 Aurix Tc375Lk 上使用 Rust 編程語言,可以嗎?如果是,鏈接 rust 編譯器 ADS 和 freetoolchain 的步驟是什么?你有在 ADS
    發(fā)表于 05-17 13:42

    [鴻蒙]OpenHarmony4.0的Rust開發(fā)

    背景 Rust 是一門靜態(tài)強類型語言,具有更安全的內存管理、更好的運行性能、原生支持多線程開發(fā)等優(yōu)勢。Rust 官方也使用 Cargo 工具來專門為 Rust 代碼創(chuàng)建工程和構建編譯
    的頭像 發(fā)表于 02-26 17:28 ?752次閱讀
    [鴻蒙]OpenHarmony4.0的<b class='flag-5'>Rust</b>開發(fā)

    谷歌捐款100萬美元給Rust基金會,以增強C++與Rust的交互性

    如今,谷歌多項核心業(yè)務仍以 C++為主要編程語言,雖然無法直接使用Rust替代現有的C++程序,但谷歌依然選擇支持Rust基金會的“Interop Initiative”計劃,幫助那些
    的頭像 發(fā)表于 02-19 15:41 ?543次閱讀

    鴻蒙OS之Rust開發(fā)

    Rust是一門靜態(tài)強類型語言,具有更安全的內存管理、更好的運行性能、原生支持多線程開發(fā)等優(yōu)勢。
    的頭像 發(fā)表于 01-29 17:19 ?843次閱讀

    一次Rust重寫基礎軟件的實踐

    受到2022“谷歌使用Rust重寫Android系統且所有Rust代碼的內存安全漏洞為零” [1] 的啟發(fā),最近筆者懷著濃厚的興趣也順應Rust 的潮流,嘗試著將一款C
    的頭像 發(fā)表于 01-25 11:21 ?549次閱讀

    Git開發(fā)者關注內存安全問題,探討引入Rust語言

    根據最新披露的郵件討論,Git開發(fā)團隊熱議在Git項目中引入Rust的可行性。作為一種開源的分布式代碼版本管理工具,廣泛運用于各種開發(fā)項目。盡管現在Git項目主要以C與Python為主要開發(fā)語言,但探討顯示,引入Rust能顯著降
    的頭像 發(fā)表于 01-15 14:23 ?526次閱讀
    Git開發(fā)者關注內存安全問題,探討引入<b class='flag-5'>Rust</b><b class='flag-5'>語言</b>

    從Rustup出發(fā)看Rust編譯生態(tài)

    從Rustup出發(fā)看Rust編譯生態(tài) 1. Rust和LLVM的關系是怎樣的? 2. Rustup中targets是什么,為什么可以安裝多個? 3. Rust在windows上為什么需要安裝Visual studio?
    的頭像 發(fā)表于 01-02 11:00 ?454次閱讀

    Python奪冠!GitHub 2023編程語言排行榜

    2023 ,Python 仍然是使用 GitHub 的開發(fā)者中最受歡迎的選擇之一,占據了幾乎 18% 的份額,在所有編程語言中保持領先地位,連續(xù)
    的頭像 發(fā)表于 12-18 14:51 ?2808次閱讀
    Python奪冠!GitHub 2023<b class='flag-5'>年</b>度<b class='flag-5'>編程</b><b class='flag-5'>語言</b>排行榜

    Python編程語言屬于什么語言

    Python編程語言屬于高級編程語言中的一種。它是一種通用、面向對象、解釋型編程語言。Pytho
    的頭像 發(fā)表于 11-22 14:31 ?1278次閱讀

    基于Rust開發(fā)的編程語言

    Move 是一門由 Rust 語言開發(fā)的一門面向資產的編程語言,最早由 Facebook (現 Meta )投入大量的人力物力開發(fā),用于 Libra (現 Dime )項目,處理全球性
    的頭像 發(fā)表于 11-17 12:30 ?621次閱讀

    使用Rust優(yōu)化Python性能

    在數據分析領域Python無疑是最流行的編程語言,但是Python有一個硬傷就是作為一個編譯語言在性能上有些微的欠缺。而同樣最流行的語言Rust
    的頭像 發(fā)表于 11-01 15:59 ?801次閱讀
    使用<b class='flag-5'>Rust</b>優(yōu)化Python性能