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]。
-
高性能 [13]:Rust 沒有運行時和垃圾回收器,可以提供對性能要求很高的服務,可在嵌入式設備上運行,也可以很方便地和其他語言集成 [13];對比 C、C++ 和 Go,可以看到 Rust 的性能和 C++ 接近,遠快於 Go [14]。
Rust vs C gcc/Clang [14]
Rust vs C++/Go [14]
-
可靠性 [13]:安全可以說是 Rust 對比 C 語言最大的優勢 [2],2020 年 8 月 Rarf Jung 在他的博士論文中提供了第一個正式證據(RustBelt),證明了 Rust 的安全承諾成立 [15],即使開發者有可能編寫 “不安全” 代碼,Rust 的安全聲明仍然有效 [16]。
-
內存安全:採用了所有權類型系統,每個被分配的內存都有指針,且給每個變量都設定了生命週期,一旦超出生命週期,變量就會被自動釋放 [12];劃分安全邊界,如果你要做內存不安全的事情,必須在代碼中明確 [2];
-
線程安全:採用 1: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]:
-
Parity:安全的語言特性與區塊鏈的特性天生有重合性,因此區塊鏈也成爲較早引入 Rust 語言的領域之一,Gavin Wood 博士開發的 Parity 客戶端應該是首個使用 Rust 的區塊鏈項目,於 2015 年推出,Parity Technologies 的產品還包括 Polkadot、substrate 等 [3]。
-
Facebook: 從 2016 年開始使用 Rust,當時啓動了一個名爲 Mononoke 的重寫項目;有 Mononoke 項目作爲 Rust 語言是可行的,2019 年內部 Rust 開發團隊達到了 100 人,並開始應用於 Diem 區塊鏈項目;2020 年在內部成立了 Rust 開發者體驗團隊,繼續爲 Rust 社區做貢獻,並支持內部 Rust 項目開發 [21]。
-
Google:2016 年開始開發的 Fuchsia 操作系統,在 2020 年 12 月首次亮相於 google open source [22],其中 22% 的代碼爲 Rust 編寫 [23]。
-
Amazon:從 2017 年開始在一些服務中使用 Rust,如 Firecracker(2018 年)、Botterocket(2021 年)等 [24]。
-
微軟:2019 年 2 月發佈報告稱 70% 的安全問題爲內存安全問題,爲了解決安全問題,開始嘗試使用 Rust 來代替 C/C++ 重寫 Windows 組件;微軟的 DeisLabs 團隊也選擇 Rust 來構建 Kubernetes 工具 Krustlet,並稱 Rust 比 Go 更適合 Kubernetes 的開發 [25]。
2020 年 12 月,首屆 RustChinaConf 在深圳舉辦,由 Rust 語言中文社區主導,贊助商包括華爲、飛書、solana、NEAR 等企業,會議議題涉及區塊鏈、數據庫、雲計算等各個領域,國內企業在 Rust 應用項目上也已有一定的嘗試 [20]:
-
PingCAP:於 2016 年 1 月開始使用 Rust 開發底層分佈式儲存 TIKV,並於 2016 年 4 月開源 [26]。
-
字節跳動飛書團隊:2017 年開始引入 Rust,飛書客戶端非 UI 部分是由 Rust 跨平臺實現 [27];2021 年 5 月開源 rsmpeg 項目,一個 FFmpeg 的庫,也是採用 Rust 作爲主要語言 [28]。
-
華爲:華爲致力於推進通信系統軟件的安全可信演進,一直活躍於 Rust 社區,開發了代發度量工具 Tokei、Cargo-Geiger 等;同時也嘗試將 Rust 應用於開源項目,StratoVirt 是 openEuler 上的企業級虛擬化平臺,面向雲數據中心,實現了一套架構統一支持虛擬機、容器、Serverless 三種場景 [29];MindSpore 的 AI 團隊建立了基於 TVM Rust Runtime 的運行模型,併發起了 Rusted AI 的非商業組織,推動 Rust 在 AI 領域的應用落地 [30]。
安全問題是商業公司考慮採用 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