編譯 | 蘇宓
出品 | CSDN(ID:CSDNnews)
2025 年 5 月 15 日,Rust 首個穩定版發布迎來了 10 周年。作為一門現代系統編程語言,Rust 兼具內存安全和高性能,允許開發者寫出快速、高效、可靠的程序。它的核心亮點在于“所有權”模型——這套機制能在編譯階段就幫你排除一大批常見 bug,比如數據競爭、空指針等,而且不需要垃圾回收器。因此,Rust 特別適合用于性能要求極高的場景,比如操作系統、游戲引擎、瀏覽器等。
如今 Rust 已經成了全球最火的編程語言之一。微軟、亞馬遜都認為它是未來的關鍵技術,同時 Discord 就用 Rust 來提升性能、Dropbox 用它同步文件、Cloudflare 用 Rust 處理了全球 20% 以上的網絡流量,連美國政府也在大力推廣用 Rust 寫軟件,說這樣能讓系統更安全。
殊不知,回看 Rust 的誕生,起點可以說相當“接地氣”。
2006 年,Graydon Hoare 這一年 29 歲,是 Mozilla 瀏覽器公司的程序員。有一天他下班回到溫哥華的公寓,結果發現電梯又壞了——原因是系統崩潰了,而且不是第一次了。
他住在 21 樓,只能硬著頭皮爬樓梯。一邊爬,一邊越想越氣:“我們搞計算機的,居然連個不會崩潰的電梯程序都做不出來,簡直離譜。”
他很清楚,這類故障常常是內存管理出問題。像電梯這種嵌入式設備里,軟件大多是用 C 或 C++ 寫的。這類語言運行快、占空間小,但也容易出錯,尤其是容易引入“內存漏洞”——只要處理不當,程序就會直接崩潰。
微軟曾經統計過,它自家代碼中高達 70% 的漏洞,都和 C/C++ 寫的內存管理有關。
大多數人可能就是罵幾句了事,但 Hoare 決定做點什么。他回到家,打開筆記本,開始設計一門新語言。他想要一種既能寫出小而快的程序,又能在根本上避免內存 bug 的語言。
他給這門語言起名叫Rust,靈感來自一種非常頑強的真菌——在他眼里,這個名字意味著“為生存而過度設計”。
時下,正值 Rust 穩定版迎來 10 周年之際,Rust 基金會官方博客最新分享了一篇來自 Rust 編程語言作者 Graydon Hoare 撰寫的博文《10 Years of Stable Rust: An Infrastructure Story》,以此慶祝。博文中,Graydon Hoare 回顧了 Rust 的誕生歷程,也將其視為一種基礎設施。
以下為其發布的全文:
Rust 今天 10 歲了——準確來說,是它的 1.0 正式發布已經過去了整整 10 年。在這十年中(以及發布前近十年的開發期),Rust 的成長和變化幾乎超出了我的理解范圍。如果說我對它的發展軌跡感到驚訝,那就太輕描淡寫了。我只能衷心感謝、祝賀并贊美所有參與其中的人。能在這些年里見證 Rust 的一切,并從今天的角度回望這一切,實在令人深受鼓舞。
雖然我們很容易將 Rust 的旅程歸結為一個“理念”的發展——比如從我 2006 年在一部壞掉的電梯里沮喪而滑稽的靈感開始,這在 MIT Technology Review 的一篇文章中有詳細記載(https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/)——但我認為,如果只這么講,那就忽略了更宏大的圖景。
在我看來,Rust 是一個關于廣大利益相關者如何齊心協力,設計、構建、維護并擴展共享技術基礎設施的故事。這是一個由許多參與者共同譜寫的故事:
使用該語言的開發者群體,他們通過討論、爭論、測試和 bug 報告表達自己的需求和約束——這些都來源于他們編寫庫和應用程序的實際經驗。
語言的設計者與實現者,他們在努力滿足這些需求與約束的同時,還要面對每一個設計決策所帶來的意外后果。
作家、教育者、講者、翻譯者、插畫師以及其他各類傳播者,他們讓更多人能夠使用和貢獻這一基礎設施。
對項目進行長期投資的機構,它們為持續多年的工作提供了所需的資金與支持。
所有這些角色,都圍繞著同一個核心——基礎設施。
基礎設施
編程語言是一種技術基礎設施:它們是工具。Rust 是一種構建其他基礎設施的工具,比如網絡協議、Web 服務器、負載均衡器、遙測系統、數據庫、編解碼器、密碼學工具、文件系統、操作系統、虛擬機、解釋器等等。
我認為,與其去爭論 Rust 是否“屬于系統編程語言”的邊界,不如將它看作是一種“基礎設施工具”,這種視角更為有用。正如 Deb Chachra 在她那本關于物理基礎設施的出色著作中寫道:
“我們的基礎設施系統越強大、越可靠,我們考慮的東西就越少,我們投入到其他事務上的時間和精力就越多。”
這正是 Rust 最擅長承載的系統類型:它們不是華而不實,也不博人眼球,甚至往往悄無聲息。但它們穩健、可靠,是支撐其他工作順利開展的必需品。它們應當如水電般存在——我們理應相信它們會在背后安靜運行,絲毫不擾。
然而,正如 Chachra 同樣指出的那樣:“基礎設施最引人注目的時刻,往往是它出故障的時候。”
Rust 的最初實現、持續投資以及令人難以置信的傳播速度與接受度,都源于世界對穩健可靠基礎設施的需求——而當時我們已有的基礎設施明顯不夠好。簡單來說:它們太容易出問題,代價太昂貴。最輕的代價是崩潰和宕機,最嚴重的是安全漏洞。雖然當時已經有一些高效的“基礎設施構建語言”,但它們難以使用,尤其是在寫并發代碼時幾乎不可能做到安全。
這種差距讓人們深切感受到“基礎設施赤字”的存在,盡管并非每個人都能準確指出它的本質。與此同時,我們對計算的期望與日俱增:摩爾定律開始趨于停滯,多核系統日益普及,低功耗嵌入式設備和物聯網迅速擴張,一切設備也越來越頻繁地接入互聯網、暴露在攻擊之下。基礎設施軟件不堪重負,而構建它的工具——顯然已成為罪魁禍首之一。
從這個視角來看,Rust 的機會其實非常明確。我們這些身處其中的人對此感同身受,渴望更好的工具。我們中的許多人曾用過函數式語言或研究型語言,體驗過“更好世界的一角”,但卻被現實中的工具所困。
投資
我們之所以被當時已有的工具所限制,是因為構建像 Rust 這樣更好的工具,需要投入大量的時間、精力和資金。我最初寫的 Rust 引導編譯器只有幾萬行代碼;這已經接近一個沒有資金支持的業余項目所能達到的極限。
2009 年,Mozilla 決定投資 Rust,這一決定立刻讓團隊規模擴大了四倍——實際上,這個決定才算真正組建了一個團隊。
之后數年,團隊規模又接連翻倍。Mozilla 從 2009 年到 2020 年持續投入 Rust,這是一個極為罕見、極不尋常的長期投資。同時,Mozilla 還自 2012 年起資助了用 Rust 編寫的完整瀏覽器引擎 Servo,后者也成為 Rust 語言功能的關鍵試驗平臺。這兩個項目有幾十位工程師參與,持續奮戰了整整十年。
而且,投入者遠不止 Mozilla。以下是一些例子:
Rust 構建于 LLVM 之上,后者是更大型的通用技術基礎設施,最初由伊利諾伊大學厄巴納-香檳分校的研究人員開發,后來得到了 Apple、Qualcomm、Google、ARM、華為等眾多機構的資助。
Rust 的內存安全模型直接繼承自數十年的學術研究成果,以及一些學術-工業合作項目,如 AT&T 貝爾實驗室和康奈爾大學共同開發的 Cyclone 項目。
Rust 和 Servo 項目在三星也有多位貢獻者,反映出該公司對這些項目的戰略興趣。
來自頂尖編程語言研究院系(如 CMU、NEU、IU、MPI-SWS 等)的實習生、研究人員和教授,也在業余時間為 Rust 做出大量貢獻。
到了 2020 年,為了獲得更多元的資金支持,其他公司也加入了進來。Amazon、Facebook、Google、Microsoft、華為等雇傭了核心開發者,并提供硬件和管理資源,助力項目持續發展。
這些公司以及其他許多機構還加入了 Rust 基金會,資助物理基礎設施、法律與組織結構建設,提供項目補助與長期戰略支持。
JetBrains 和 Rust-Analyzer 的 OpenCollective 社群基本上資助了兩套增量式交互前端的重構實現,為 IDE 提供語言服務——這是現代開發中不可或缺的關鍵工具。
數百家公司和機構也投入時間和金錢評估 Rust 是否可用于生產環境,編寫 Rust 程序,測試它們,提交 bug,并資助員工修復或改進問題。
最后但絕非最不重要的是:成千上萬的志愿者為這個項目無償付出多年。雖然從表面上看似乎是“免費”的,但這也是有代價的——只是不像企業預算那樣顯性。
盡管這是一項長期投資,但它確實得到了回報。我們所有人都從中受益。
回顧過去
我在 2006–2009 年間寫的“嬰兒版” Rust 幾乎沒有類型檢查功能,生成的代碼速度極慢,只能在三個平臺上運行(其實都是 32 位 x86,說白了就是一個平臺),幾乎無法進行基本的 IO 操作或運行簡單的演示測試。當時的引導編譯要花上好幾個小時。
到了 2015 年發布 1.0 時,Rust 已經被徹底改造,來自無數人的努力讓它幾乎不再是原來的語言。它擁有由世界頂級專家設計的多態類型系統,性能好到可以與 C++ 一較高下,支持大多數主流 LLVM 平臺,甚至可以用它寫出一個功能相當可觀的瀏覽器引擎。
但即便如此,Rust 1.0 以今天的標準來看,依然顯得相當“原始”。雖然它在當時已“可用于生產”(或者說“穩定”),但距離真正“走向主流”還差得遠。它當時還缺乏:
高質量的 IDE 體驗。Rust 1.0 用戶當時只能使用新出的自動補全工具,而今天的 Rust 則配備了工業級的 LSP 語言服務器 rust-analyzer。
龐大的包生態與成熟的 cargo 工具。1.0 時,crates.io 上僅有約 2000 個 crate,cargo 還很新——發布才半年,代碼量僅約 1.4 萬行。如今的 cargo 體積已增長至六倍,成為衡量所有包管理器的新標桿,crates.io 也已擁有超過 18 萬個 crate。
高性能 IO 或網絡的標準解決方案。如今 Rust 在網絡流量處理方面表現極佳,但在 1.0 時,語言機制和如 Tokio 這類運行時尚未問世,async/await也尚未引入。
大量語言層面提升開發體驗的改進。例如 ? 運算符用于簡化錯誤傳遞、模式匹配語法改進、模塊系統優化等等,大幅提升了日常編碼的可讀性與可維護性。而 Rust 著名的錯誤信息提示,更是所有語言競相效仿的典范。
正式的語言規范,如近期通過的 FLS(以及即將發布的正式規范)。尤其是在 unsafe 語義方面,Rust 1.0 沒有任何描述代碼含義或其正確性邊界的說明,這方面如今已有 RustBelt 項目和 MIRI 解釋器來補足。
MIR 中間表示完全不存在!當時編譯器直接從 AST 降級為 LLVM IR,導致很多優化、錯誤分析,甚至一些核心功能幾乎無法實現。從 const 求值到非詞法生命周期,全都依賴 MIR 的引入。
核心庫的顯著擴展。核心庫代碼從約 4 萬行增長到 12 萬行,標準庫從 1.5 萬行擴展到 7.9 萬行——如今它們的體量已經超過了 Rust 1.0 時整個編譯器的體積!每個版本都帶來了新特性、API 改進、文檔完善和語言調整。
值得注意的是:這些變更全部發生在 1.0 發布之后,因此每一項都必須通過詳盡的測試套件,每一個版本都需回歸測試公開 crate 生態的一大部分,幾乎所有破壞現有代碼的更改都會被拒絕。如 1.0 發布公告所承諾,Rust 實現了“穩定而不僵化”:舊代碼幾乎都能順暢運行,如同優秀的基礎設施應有的樣子。
為了更直觀地感受 Rust 在保持向后兼容的前提下,持續演進所帶來的龐大變更量,我們可以來看一組具體數字:
在 1.0 發布之前,Rust 倉庫中共記錄了約4 萬次變更;而在此之后,又增加了24.6 萬次變更。換句話說,過去十年里,平均每小時有約 2.8 個變更合并,全年無休、晝夜不停。
參與貢獻這個倉庫的人數從 1.0 發布時的不到1000 人增長到現在的約 6700 人。
這些貢獻者一共提交了超過14 萬個 Pull Request,關閉了超過4.7 萬個 Issue。
在 1.0 時,用于提議和管理語言變更的 RFC(Request for Comments)約有1100 個,而如今已經有3772 個。
自 1.0 發布以來,Rust 社區共完成了87 個完整的發布周期,幾乎都是每六周按時發布。
此外,還有 3 個主要版本(edition)發布,這些版本將一批不兼容變更打包,以“僅影響 opt-in 的 crate”的方式進行切換,從而不破壞現有代碼。
每個版本發布前會運行的生態兼容性測試,也從 1.0 時針對約 2500 個 crate,擴大到了如今的約 58.7 萬個 crate。
雖然 Rust 在軟件層面的種種變革令人印象深刻,但同樣值得稱道的,是它在軟件之外所經歷的一系列重要轉變。正是這些變化,確保了 Rust 能真正承擔起服務社區的基礎設施角色:
誕生了大量與 Rust 相關的書籍,許多是由受雇于 Rust 項目的工程師在工作時間內完成的。《The Rust Programming Language》《Programming Rust》《Rust In Action》《Rust for Rustaceans》等新版圖書不斷出版,并被翻譯成多種語言,填滿了世界各地的書架。
教學資源也迅速增長。從《Rust By Example》和《Rustlings》到 Google 出品的《Comprehensive Rust Course》,自 1.0 以來,Rust 學習材料的數量與質量都實現了爆發式提升。
Rust 項目在組織與運營層面也做了大量工作:Rust 基金會作為獨立的法律和財務實體成立,接手了包括商標在內的關鍵法律權益,并為項目提供日常運營支持與重要資源的管理,如集成測試基礎設施和 crates.io。
與此同時,項目的內部治理結構也經歷了多輪重組,最終形成了如今的“領導委員會”體系。
參與 Rust 項目指導、倡導與需求制定的利益相關者和機構數量大幅增長,如今其中已包括涉及安全關鍵軟件工業標準的組織,甚至還有國家政府與相關機構。
展望未來
再次引用 Deb Chachra 的話:
“首先,構建這類系統的前提,是相信未來幾十年會有一個穩定的社區從中受益。這是一種對共同未來的投資,本質上關乎延續性和時間。其次,若能為所有人普遍提供這類系統,其經濟價值也會隨之增強——因為建設和運營成本可以在更多用戶之間攤銷。”
Rust 發展至今,是無數具有前瞻性的機構和成千上萬相信“長期回報”的個人共同努力的成果。雖然 Rust 已經存在了 10 年(甚至可以追溯到 15 或 20 年前),但 C++ 已走過 40 年,FORTRAN 更接近 70 年。Rust 完全有可能擁有同樣長,甚至更長的生命力。
因此,在思考 Rust 的未來時,有幾個重點值得關注:
在這十年間,數以千計的貢獻者中,很多人由于精疲力竭或其他事務纏身,不得不逐步淡出。我自己也只堅持了 7 年!雖然 Rust 項目自早期就通過行為準則等方式致力于建設一個廣泛包容的社區,但仍需要持續投入精力來吸引和融入新成員,同時也要妥善完成每一代維護者的交接工作。
對于資助機構而言,情況也是一樣。Rust 項目需要盡可能保障每一代維護者都能獲得穩定、多元的支持來源,并在理想情況下,為希望長期從事 Rust 開發的人提供全職工作機會。
項目很可能還會持續擴張。目前 Rust 在編程語言市場中約占 3%,隨著規模的擴大,必然會面臨更多擴展性挑戰。例如:Cargo 近期花了大量時間設計全新的稀疏索引協議,僅僅是因為原來的索引數據已龐大到 git 無法高效處理。甚至連項目的團隊目錄都復雜到需要專門的管理工具。
隨著項目規模增長,保障穩定性與兼容性將變得更為關鍵。任何錯誤帶來的代價和影響人群都會增加,尤其是那些將自身業務運行建立在 Rust 工具和代碼之上的機構,其風險容忍度極低。項目必須以更高的標準來要求自己——確保每一次改動都正確無誤,并充分征求所有可能相關方的意見。這還應包括在可靠性技術上的投入,比如當前正在 Rust 基礎上構建的多個形式化方法項目。
當然,無需等到未來才能看出 Rust 的任務清單有多龐大。項目當前已經“任務滿滿”了!雖然已有 4.7 萬個 issue 被關閉,但仍有超過 1 萬個尚未解決,每天都有新的問題被提出。3,772 個 RFC 中也還有不少處于開放狀態,等待關注;成百上千項變更正處于評審與合并流程中;每六周,還需要發布一個全新的穩定版本。
這一系列持續、有序、令人驚嘆的工作流,本身就是一個奇跡。Rust 項目為“什么是優秀的工具、優秀的流程、優秀的軟件基礎設施”樹立了全新標準。所有參與其中的人,都理應為他們的成就感到自豪。
原文:https://rustfoundation.org/media/10-years-of-stable-rust-an-infrastructure-story/
https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.