Rust 生態發展之路

Rust 最初是 Mozilla 員工 Graydon Hoare 在 2006 年開始做的私人項目 [1],Graydon Hoare 原來是語言工程師,會參與編譯器或工具的實現但並沒有參與設計,因此開始有了自己設計語言的想法 [2]。

Rust 語言的設計參考了很多其他語言,在 70 年代末和 80 年代初,編程語言有很多優秀的競爭者,許多好想法並沒有轉化成廣泛使用的系統語言,Graydon Hoare 希望能結合現代編程語言的理論實現這些好想法 [2]。

Rust 基因圖譜 [3]

Mozilla 從 2009 年開始贊助這個項目,成立了團隊來支持 Rust 的開發,並開始應用於實驗性的 Servo 瀏覽器引擎項目 [1] (2020 年 8 月 Mozilla 大規模裁員,已經基本砍掉了對 Servo 的官方支持,也包括不少 Rust 活躍開發人員 [4])。

2010 年 Rust 首次公開,同年開始改寫自託管編譯器(基於 LLVM 後端)來替換原來用 OCaml 寫的編譯器,在 2011 年實現了自我編譯 [1]。

第一個穩定版本 Rust 1.0 到 2015 年才首次發佈,隨後按照 “6-week train model” 進行發佈,可能每天都會產生一個開發版本,固定每 6 周發佈一個測試版本,但仍需要經過測試纔會合入穩定版本,就像火車一樣按照時刻表發車 [5]。

nightly: * - - * - - * - - * - - * - - * - * - *
                     |                         |
beta:                * - - - - - - - - *       *
                                       |
stable:                                *

Rust 2021 的穩定版預計在 10 月發佈 [6],經過 11 年的發展,Rust 開源社區已有超過 6000 貢獻者 [7],約有 1300 萬開發者 [8]。

Stack Overflow 的開發者調研顯示只有 7% 的開發者在使用 Rust,對比 JavaScript、Python 等語言,使用 Rust 的開發者佔比並不高;但從 2016 年開始,Rust 每年都是開發者最愛的編程語言 [9]。

開發者使用的語言佔比 [9]

開發者喜歡和討厭的語言 [9]

最愛的特性


首先 Rust 是存在一些不足的,比如學習曲線陡峭,在 2020 年的調研中約 15.8% 的開發者認爲如果 Rust 更好學那麼應用 Rust 的人會更多,而完善文檔和課程是提及最多的方法。Rust 語言概念層次結構如下圖 [10]:

Rust 語言概念層次結構梳理 [10]

其中生命週期、所有權等概念對於初學者來說可能難以理解,特別是 “生命週期”,有 61.4% 的反饋者認爲難以理解或學習困難 [11];

Rust 中最難的話題 [11]

另外編譯時間較長也是 Rust 社區一直在討論的問題,在 2020 年的調研中約半數開發者(50.5%)感覺已經有一定的提升,但縮短 Rust 的編譯時間仍然是 Rust 團隊接下來的重要任務 [11]。

不過這些不足完全不能掩蓋 Rust 的突出優勢。

Rust 設計的目標人羣是 “被 C++ 所困擾的開發者”。C/C++ 一直是系統編程的首選,但由於內存安全、數據競爭等引起的問題也一直存在,Rust 就是爲了從語言層面解決這些問題而誕生的。

在實現安全系統編程的同時對底層有控制權 [12],官網介紹 Rust 可以 “賦予每個人構建可靠高效的軟件的能力” [13]。

  1. 高性能 [13]:Rust 沒有運行時和垃圾回收器,可以提供對性能要求很高的服務,可在嵌入式設備上運行,也可以很方便地和其他語言集成 [13];對比 C、C++ 和 Go,可以看到 Rust 的性能和 C++ 接近,遠快於 Go [14]。

    Rust vs C gcc/Clang [14]

    Rust vs C++/Go [14]

  2. 可靠性 [13]:安全可以說是 Rust 對比 C 語言最大的優勢 [2],2020 年 8 月 Rarf Jung 在他的博士論文中提供了第一個正式證據(RustBelt),證明了 Rust 的安全承諾成立 [15],即使開發者有可能編寫 “不安全” 代碼,Rust 的安全聲明仍然有效 [16]。

  1. 生產力 [13]:

開源生態


# 開源運營

Rust 在 2009 年開源,雖然是由 Mozilla 資助,但其實是一個社區共有的項目,很大一部分代碼來自於社區貢獻者 [1]。從 Rust 0.1.0 開始,共有 6273 人蔘與 Rust 社區貢獻(數據來自 GitHub 上 rust-lang/rust 倉庫和大部分相關子模塊)[7],各版本的貢獻者和貢獻數如下圖,除了最初的 0.1.0 版本,2017 年 4 月發佈的 1.17.0 版本貢獻者數和貢獻數最多。

Rust 社區貢獻 [7]

Rust 有完善的提案流程(RFC,Request For Comments),每一個人都可以提交提案,進行開發工作的核心團隊細分爲專項治理語言項目、社區運營、語言核心開發、工具開發、庫開發等,來管理維護各個項目的各方面事項,具體如下圖 [13]:

Rust 團隊 [13]

語言在不同領域的應用則由工作組來開發維護,如嵌入式設備、遊戲開發、安全響應等 [13]。

Rust 工作組 [13]

除了工作團隊和工作組,還提供了用戶論壇(討論任何與 Rust 相關的內容)、內部論壇(討論語言自身開發)和 Discord、Zulip 等聊天平臺用來交流 [13]。

日常有超過 90 個聚會和幾個世界級的會議,對 Rust 感興趣的開發者可以註冊自己的活動,社區團隊也提供了一些活動支持 [17],並運營了 RustBridge 項目幫助開發者學習 Rust。

受疫情影響,Mozilla 在 2020 年 8 月宣佈裁員約 250 人,佔了公司人數的四分之一,其中包括了 Rust 開發團隊。

雖然 Mozilla 被砍的項目非常令人惋惜,但 Rust 開發團隊的專家們被裁後加入了 Facebook、Amazon、Google 等科技巨頭公司 [4],也許 Rust 會因此變得更加開放、獲得更多資源支持。2021 年 2 月 Rust 基金會宣佈成立,贊助商包括了華爲、AWS、Google、Microsoft、Facebook 等,基金會將會完全專注於 Rust 語言的開發與生態發展 [18]。

Rust 基金會成員 [18]

包管理

Rust 共有 6.8 萬個註冊的包,包括基礎庫和框架,總下載次數達到 95 億次,下載次數較多的包涉及數值、解析器、字符解碼、FFi 開發、序列化 / 反序列化等,其中下載次數最多的 “rand” 庫(2015 年 2 月首次提交),下載次數已超過 8000 萬 [19];第二的 “syn” 庫爲 Rust 源碼解析器(2019 年 6 月首次提交),下載次數已有 7500 多萬。

下載次數最多的庫 [19]

包數量最多的分類是如下,除了通用的命令行程序、無標準庫運行、開發工具等,可以看到 Web 編程網絡編程、數據結構、密碼學、嵌入式開發、異步相關的庫也比較多。

庫數量最多的分類 [19]

商業應用


2015 年 Rust 才發佈穩定版本,但已有很多大公司選擇 Rust 來開發或改寫重要項目 [20]:

2020 年 12 月,首屆 RustChinaConf 在深圳舉辦,由 Rust 語言中文社區主導,贊助商包括華爲、飛書、solana、NEAR 等企業,會議議題涉及區塊鏈、數據庫、雲計算等各個領域,國內企業在 Rust 應用項目上也已有一定的嘗試 [20]:

安全問題是商業公司考慮採用 Rust 的首要原因,Rust 在沒有犧牲性能的情況下提供了比 C/C++ 安全的系統編程,使其成爲了更好的選擇。

但根據 JetBrains 2021 年的調研報告,出於興趣或爲私人項目選擇 Rust 的開發者仍然佔大多數,真正用於工作的開發者僅佔 16%,而 Go 語言用於工作的開發者比例佔到了 61%,差距明顯 [31]。爲 Rust 項目提供支持、給 Rust 開發者創造更多工作機會也是 Rust 基金會的目標之一。

Rust 應用 [31]

總結


Rust 的設計哲學是內存安全、零成本抽象和實用性 [10],其解決的安全問題是系統開發一直以來的痛點,傳統領域如網絡、數據庫對於安全要求越來越高,新興領域如區塊鏈天然對於安全性就有極高的要求,因此 Rust 才能迅速獲得國內外公司的青睞,成爲 C/C++ 的有力競爭者。

除了性能上的核心競爭點,Rust 開源開發和生態建設的團隊工作也非常明確。Rust 基金會成立後,整體項目由基金會來支持;開發通過開源社區進行;且由於 Rust 語言的學習門檻,社區團隊在儘可能完善文檔,幫助更多的人成爲專業的 Rust 開發者,也吸引到了大量專業人士積極參與貢獻。

Rust 名字來源於一種生命力很強的真菌,Graydon Hoare 希望 Rust 語言可以覆蓋在死去語言的殘骸之上,吸收這些舊語言的優秀特性,像真菌一樣擁有多種可以互相轉化的生命形態 [32]。Rust 的名字從字形上糅合了 Trust 和 Robust,也暗示了 “信任” 和“魯棒性” [10]。目前來看,Rust 確實擁有了極強的生命力,讓我們期待一下 Rust 的永不休眠。

參考

[1]

Rust (programming language) - wikipedia https://en.wikipedia.org/wiki/Rust_(programming_language)

[2]

Interview on Rust, a Systems Programming Language Developed by Mozilla - InfoQ https://www.infoq.com/news/2012/08/Interview-Rust/ 

[3]

當區塊鏈遇上 Rust —— 爲什麼 Rust 編程語言適合區塊鏈開發 - Rust 語言中文社區 https://rustcc.cn/article?id=289da7be-19ce-49fe-af6d-3a7946404ca6

[4]

Facebook, Microsoft, Google and Amazon are snapping up experts in the Rust programming language months after Mozilla laid them off - Insider https://www.businessinsider.com/facebook-amazon-microsoft-rust-mozilla-layoffs-2021-1

[5]

How Rust is Made and "Nightly Rust" https://doc.rust-lang.org/book/appendix-07-nightly-rust.html

[6]

The Plan for the Rust 2021 Edition https://blog.rust-lang.org/2021/05/11/edition-2021.html

[7]

thanks - https://thanks.rust-lang.org/

[8]

State of the Developer Nation 20th Edition - Slash Data https://www.slashdata.co/free-resources/developer-economics-state-of-the-developer-nation-20th-edition?

[9]

2021 Developer Survey - Stack Overflow https://insights.stackoverflow.com/survey/2021

[10]

張漢東. Rust 編程之道. 電子工業出版社, 2019

[11]

Rust Survey 2020 Results https://blog.rust-lang.org/2020/12/16/rust-survey-2020.html 

[12]

2021 年 Rust 行業調研報告 - InfoQ https://www.infoq.cn/article/umqbighceoa81yij7uyg

[13]

Rust 官方網站 https://www.rust-lang.org/ 

[14]

Rust - Bechmarks Game https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust.html 

[15]

R. Jung, Understanding and Evolving the Rust Programming Language https://people.mpi-sws.org/~jung/phd/thesis-screen.pdf

[16]

Computer Scientist proves safety claims of the programming language Rust - Eurekalert https://www.eurekalert.org/news-releases/610682

[17]

Rust Events team https://github.com/rust-community/events-team#-rust-events-team

[18]

Hello World! - Rust Foundation https://foundation.rust-lang.org/posts/2021-02-08-hello-world/

[19]

The Rust community’s crate registry https://crates.io/ 

[20]

Rust China 大會總結 https://liujiacai.net/blog/2021/01/09/rust-china-conf-summary/#headline-9

[21]

A brief history of Rust at Facebook https://engineering.fb.com/2021/04/29/developer-tools/rust/

[22]

Google Fuchsia - wikipedia https://zh.wikipedia.org/wiki/Google_Fuchsia

[23]

Fuchsia OS uses Rust to write code extensively - meterpreter https://meterpreter.org/fuchsia-os-uses-rust-to-write-code-extensively/

[24]

How our AWS Rust team will contribute to Rust’s future successes - amazon https://aws.amazon.com/cn/blogs/opensource/how-our-aws-rust-team-will-contribute-to-rusts-future-successes/

[25]

How Microsoft Is Adopting Rust - medium https://medium.com/@tinocaer/how-microsoft-is-adopting-rust-e0f8816566ba

[26]

TiKV 正式從 CNCF 畢業,旨在爲雲原生時代構建分佈式系統 - InfoQ https://www.infoq.cn/article/xuwubxr5ohf3j1vszvo3

[27]

Rust 跨平臺客戶端開發在字節跳動的實踐 - InfoQ https://www.infoq.cn/article/oh79weak7z3s2xavo*bv

[28]

Rsmpeg - GitHub https://github.com/larksuite/rsmpeg

[29]

華爲 | 基於 Rust 的下一代虛擬化平臺 - StratoVirt https://rustmagazine.github.io/rust_magazine_2021/chapter_3/hw_rust_stratovirt.html

[30]

華爲 | 基於 TVM Rust Runtime 和 WASM 沙箱運行 AI 模型 https://rustmagazine.github.io/rust_magazine_2021/chapter_3/hw_rust_rvm_wasm_ai.html

[31]

The State of Developer Ecosystem 2021 - JetBrains https://www.jetbrains.com/lp/devecosystem-2021/rust/ 

[32]

Internet archaeology: the definitive, end-all source for why Rust is named "Rust" - reddit https://www.reddit.com/r/rust/comments/27jvdt/internet_archaeology_the_definitive_endall_source/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/VAHQTnFmcPIIf8NiGFVsGQ