Rust 稳定版十周年全景回顾,技术与生态的双重进化!

十多年前,Rust 还是个“冷门但令人好奇的小语言”,几乎没人预料到它会成为今天最受关注的编程语言之一。

如今,它拥有数百万开发者、数千位社区贡献者、强大的编译器工具链、丰富的生态系统,甚至还有专属的基金会和支持它的企业阵营。Rust 的出现,在某种程度上拓展了我们对编程语言能否兼顾安全与性能的技术边界。

在 Rust 1.0 稳定版发布整整十周年之际,为纪念这一时刻,Rust 编程语言的最初作者 Graydon Hoare 撰写了题为10 Years of Stable Rust: An Infrastructure Story 的长文,回顾这门语言的起点与转折,也展望它可能的未来方向。我们翻译并节选了这篇文章,期待能为你带来关于技术演进、社区协作与可持续建设的更多思考。

如果说 Graydon 的文章是一份关于 Rust 十年演进的深度回顾,那么 Programming Rust 这本书,则是在实践层面帮助我们深入理解这门语言设计理念与强大能力的权威读本。

作为 Rust 社区最受欢迎的参考书之一,它不仅全面讲解了语言的核心机制与技术细节,也系统呈现了 Rust 在构建可靠、安全、高性能系统中的独特价值。


Rust 今天 10 岁了,确切地说,是 1.0 版本发布满 10 年了。这个十年(再加上之前近十年的开发)中,它的成长和变化之大,已经超出我的想象。要说我对它的发展轨迹感到惊讶,远远不够表达我的心情。

我要由衷感谢、祝贺并致敬所有参与其中的人。能亲眼见证这一路走来的点点滴滴,是非常鼓舞人心的事。

说起来,我本可以用“一个想法的演变”来讲述 Rust 的历程——比如起点是我 2006 年因为电梯坏了而产生的某种灵感(详见 MIT Technology Review 的那篇文章)——但我觉得,那样的说法可能会忽略了更重要的部分。

在我看来,Rust 的故事,其实是一个庞大的利益相关者社区如何一起设计、构建、维护并扩展一套共享技术基础设施的故事。这是一个群像故事,参与者包括:

  • 各类开发者,他们通过讨论、争论、测试和 bug 报告来表达自己的需求与约束,这些反馈来自他们在写库和应用时的真实体验;

  • 语言设计者和实现者,他们努力回应这些需求和限制,同时应对每一个技术决策带来的意料之外的影响;

  • 写作者、教育者、讲者、翻译者、插画师等,努力帮助更多人理解和使用这套基础设施,甚至加入改进它;

  • 长期投资这个项目的机构,他们提供维持数十年开发所需的资金和支持。

他们共同关注的,是“基础设施”。

01

基础设施

编程语言本身就是一种技术基础设施,Rust 则是一种帮助人们搭建其他基础设施的工具,比如网络协议、Web 服务器、负载均衡器、遥测系统、数据库、编解码器、加密系统、文件系统、操作系统、虚拟机、解释器……等等等等。

与其去争论 Rust 是否属于“系统级编程语言”的定义边界,我更愿意从“基础设施”这个角度理解 Rust 的定位。Deb Chachra 在她那本讲物理基础设施的书中说得很对:

“一个基础设施系统越是强大可靠,我们就越不去在意它,反而能把时间和注意力投入到别的事情上。”

这正是 Rust 最擅长构建的系统本质:不是炫酷抢眼,也不需要时刻引起关注,而是默默在后台稳定运行,让我们能够安心处理其他事,因为我们知道它不会出问题。

但 Chachra 也提醒过:

“基础设施最容易被看见的时刻,就是它出故障的时候。”

Rust 的实现、持续投入、以及如今令人惊叹的受欢迎程度,其实都源于我们对强大可靠基础设施的迫切需求——而我们原本所依赖的工具和系统,很多时候是靠不住的。说白了:它们经常出故障,不仅代价高昂,还容易造成安全漏洞。虽然当时也有很多效率很高的“造基础设施”用的语言,但那些语言太难用了,尤其是做并发编程时,几乎不可能写得安全。

这导致了一个不断扩大的“基础设施赤字”——尽管很多人说不上具体问题在哪儿,但大家都能感受到它的存在。与此同时,我们又对计算机提出了越来越多、越来越复杂的需求。摩尔定律逐渐触顶,多核系统、大量嵌入式和低功耗 IoT 系统快速增长,一切都接入了互联网,也都变得更容易被攻击。我们构建基础设施的软件工具已经越来越不堪重负,而且问题的根源,很大程度上就在于这些构建工具本身。

从这个角度来看,Rust 的机会其实很清晰。我们这些身处开发一线的人,都深刻体会到问题所在,也迫切希望能有更好的工具。很多人曾接触过函数式编程或其他学术语言,多少尝到了更好世界的味道,但现实是,我们只能用手头已有的工具。

02

投入

我们之所以只能用旧工具,是因为要造出像 Rust 这样的新工具,需要投入大量时间、精力和资金。我最初写的那个“引导版” Rust 编译器也就几万行代码,这几乎是一个没经费的个人项目能做到的极限了。

Mozilla 在 2009 年决定投资 Rust,直接让团队规模翻了四倍(之前其实还没有正式的团队),此后又连续数年不断扩张。Mozilla 从 2009 到 2020 年持续投入 Rust,这是非常少见、非常不容易的一种长期投入。同时他们还从 2012 年起资助了整个基于 Rust 编写的浏览器引擎 Servo,这不仅是一款产品,更是 Rust 语言功能的关键测试平台。光是这些项目,就有数十位工程师全职干了将近十年。

当然,不只是 Mozilla 在贡献。举几个例子:

  • Rust 构建于 LLVM 之上,而 LLVM 本身就是一个更大型的基础设施,最初由 UIUC 的研究人员开发,后续获得 Apple、Qualcomm、Google、ARM、华为等众多机构的资助;

  • Rust 的内存安全模型借鉴了几十年来的学术研究成果,以及像 Cyclone 这种由 AT&T 贝尔实验室和康奈尔大学主导的学术-工业合作项目;

  • Samsung 也曾参与 Rust 和 Servo 的开发,并将其视为战略项目;

  • 来自 CMU、NEU、IU、MPI-SWS 等顶尖学术机构的实习生、研究者和教授也都做出了重要贡献;

  • 到了 2020 年,Rust 需要更多元的资助来源,Amazon、Facebook、Google、Microsoft、华为等公司开始雇佣核心开发者,提供硬件资源和管理支持;

  • 上述公司也加入了 Rust 基金会,为项目提供物理基础设施、法律支持、组织架构,以及各种长期资助;

  • JetBrains 和 Rust-Analyzer 的 OpenCollective 社群基本上资助了两个完整的增量式前端重构实现,为 IDE 提供语言服务,这对日常开发效率至关重要;

  • 数百家企业和机构投入时间和资金评估 Rust,用 Rust 写程序、测试、报 bug,并雇佣员工解决问题或改进功能;

  • 最重要的一点:有成千上万名志愿者,投入数年时间为项目无偿工作。虽然表面上看是“免费”的,但其实这些劳动只是没有体现在企业财报里而已。

尽管周期漫长,但所有这些投入,最终都得到了回报。我们每个人都从中受益。

03

回顾过去

2006–2009 年我写的早期版本 Rust,几乎没有类型检查器,生成的代码极其缓慢,只能运行在三个平台上(实际上都是 32 位 x86 架构,可以说只有一个),连最基本的 IO 操作和小型测试都几乎跑不起来。2011 年的引导编译(bootstrap)甚至要耗费几个小时。

到了 2015 年发布 1.0 时,Rust 已被彻底重构,参与者众多,几乎已认不出这还是原来的语言。它具备由一流专家打造的多态类型系统,性能上足以稳定胜过 C++,支持大多数主流 LLVM 平台,甚至已经能用来写一个相当像样的网页渲染引擎了。

但回过头看,Rust 1.0 相较今天依然相当原始。虽然它号称“可用于生产”(或者说“稳定”),但还远远谈不上“主流就绪”。它缺乏:

  • 完善的 IDE 开发体验:1.0 时只能依赖当时还很新的 racer 自动补全工具,而现在的 Rust 已默认配备工业级语言服务器 rust-analyzer。

  • 丰富的包生态与成熟的包管理工具 cargo:1.0 发布时,crates.io 上大约只有 2000 个 crate,cargo 也仅诞生 6 个月,代码量仅 1.4 万行。而如今 cargo 已超 9 万行,成为各类包管理器的标杆,crates.io 的 crate 数已超过 18 万。

  • 标准化的高性能 IO 和网络库支持:现在的 Rust 程序擅长处理高并发网络流量,但在 1.0 时还没有 async/await 语法支持,更没有 Tokio 这样的异步运行时。

  • 众多提升开发体验的语言功能:从传播错误的 ? 操作符,到模式匹配和模块系统中的易用性优化,如今的 Rust 编程体验已经大不相同。而 Rust 最引以为傲的编译错误提示系统,也让全世界其他语言羡慕不已。

  • 语言规范的确立:直到最近才有 FLS(Rust 的语言语义规范)以及即将推出的官方语言规范。当时对 unsafe 代码的定义几乎一片空白——RustBelt 项目和 MIRI 解释器填补了这一空白。

  • MIR 的缺失:当时编译器的中间阶段是直接在抽象语法树(AST)上操作,然后直接降到 LLVM。这使得许多优化、错误分析,甚至一些非常重要的特性几乎无法实现。从常量求值到非词法作用域生命周期(NLL),都依赖于向 MIR 的转变。

  • 标准库的飞跃式扩展:std 从 4 万行增长至 12 万行,core 从 1.5 万行增长至 7.9 万行,如今标准库的体量甚至超过了 1.0 时整个编译器的规模。每次发布都有新功能、API 改进、文档完善和语言演进的同步适配。

  • 重要的一点:以上所有变化都发生在 1.0 之后的稳定期。每一项改动都通过了全面的测试,所有版本都进行了回归测试,覆盖了 crate 生态的广泛代码库。只要会破坏已有代码的变更,几乎都会被拒绝。Rust 实现了“稳定而不僵化”的承诺——大多数老代码至今还能稳健运行,像一套可靠的基础设施那样运转无误。

04

数据一览

用一组数据来概括过去这十年 Rust 项目在“不断进化但不破坏旧代码”的原则下所做的努力:

  • 1.0 之前,Rust 代码库累计了 4 万次提交;此后又新增了 24.6 万次提交。换算下来,过去 10 年几乎是每小时合并 2.8 次提交。

  • 贡献者从 1.0 时不足 1000 人,扩展到现在约 6700 人。

  • 项目已关闭超过 4.7 万个 issue,合并了 14 万多个 PR。

  • 1.0 时共计约 1100 份 RFC(用于语言演进的提案),如今累计达到了 3772 份。

  • 发布了 87 个正式版本,大多数都按六周节奏准时发布。

  • 推出过 3 个 Edition(版本变更打包,兼容旧代码),用于引入需要 opt-in 的非兼容变更。

  • 每个版本的兼容性测试范围从 2500 个 crate 增长到了现在的 58.7 万个。

而除了软件本身的演进,更重要的是围绕 Rust 建立起来的整个生态和社区:

  • 出版了大量高质量图书,包括多次再版的《The Rust Programming Language》《Programming Rust》《Rust in Action》《Rust for Rustaceans》等,也有多语言翻译版本。

  • 教学内容遍地开花:从 Rust by Example、Rustlings 到 Google 推出的 Comprehensive Rust Course,学习资源比 1.0 时代丰富了一个数量级。

  • 项目治理结构持续完善:Rust 基金会已正式成立,持有商标和法律权利,并为关键资源如 crates.io 和集成测试基础设施提供人力和资金支持。

  • 项目内部治理也经历多轮调整,目前采用的是“领导理事会”模式。

  • 参与 Rust 生态的机构范围不断扩大,如今已经包括用于高安全性领域的软件标准制定组织,乃至部分国家政府机构。

05

展望未来

Deb Chachra 曾说:

“此类系统的建设建立在一个核心信念之上——未来会有一个稳定的社区持续从中受益,通常是几十年。这是一种面向共同未来的投资,本质上关乎延续性与时间维度。更进一步,若能实现普遍可用,其价值也会因成本可在更大用户基础上摊销而进一步凸显。”

Rust 的今天,是那些具有远见的机构的长期投入,以及数千名开发者共同努力的结果。他们相信所构建的一切,最终将带来可观的长期回报。尽管 Rust 已经走过了 10 年(甚至 15 或 20 年),但别忘了,C++ 已经有 40 年历史,FORTRAN 更接近 70 年。Rust 完全有可能走得更远。

在思考 Rust 的未来时,我们需要关注以下几个关键点:

  • 在这些年里,数以千计的贡献者中,有很多因为精力耗尽或生活与工作的冲突,不得不离开。我本人也只坚持了七年!虽然项目从一开始就努力构建包容性社区(比如早期的行为准则),但仍需要不断吸引、融入新成员,并做好维护者的代际交接。

  • 对于支持机构也是一样。项目需要为每一代维护者提供稳定、多元的支持来源,尤其是能为有志从事 Rust 全职开发的人提供实际的岗位和保障。

  • 项目未来很可能继续扩张。目前 Rust 在编程语言市场的占比约为 3%,随着使用规模不断扩大,势必还会遇到更多“扩展性瓶颈”。

  • 随着生态不断扩大,Rust 项目的可靠性与兼容性也将面临更高要求。一旦出现错误,其影响的用户数量、代价及后果都将成倍上升,尤其是对那些把核心业务建立在 Rust 工具和代码上的机构来说更是如此。项目团队必须设定越来越高的质量门槛,确保每一个改动都经过充分验证,并征求所有相关方意见。这也意味着要持续投入在提升可靠性的技术上,包括那些基于 Rust 构建的新兴形式化验证工具。

  • 当然,未来不是遥不可及的想象。即便是当下,Rust 项目也任务繁重:虽然已经关闭了超过 4.7 万个 issue,但仍有超过 1 万个未解决问题,每天还有新的问题被提出。3772 份 RFC 中,仍有大量尚未进入审查流程,几百项改动等待评审和合并,而每六周还需要发布一个新版本。

如此持续、高效、有序的开发节奏,本身就是一个奇迹。Rust 项目为现代工具链、流程管理与基础设施软件设立了新的标杆。所有参与者都应该为这份成就感到自豪。

最后,特别感谢 C.S. Tysor 对这篇文章早期版本的反馈支持。

原文链接:

https://rustfoundation.org/media/10-years-of-stable-rust-an-infrastructure-story/

推荐阅读

图片

《Rust程序设计(第2版)》

吉姆·布兰迪,贾森·奥伦多夫 | 著

汪志成(@雪狼)| 译

Rust 领域经典参考书,由业内资深系统程序员编写,广受读者好评。书中全面介绍了 Rust 这种新型系统编程语言——具有无与伦比的安全性,兼具 C 和 C++ 的高性能,并大大简化了并发程序的编写。内容由 30 位一线 Rust 开发者与爱好者精心审读,业内专家陈天、唐刚、王旭、张汉东、张炎泼重磅推荐。

第 2 版对上一版内容进行了重组和完善,新增了对“异步编程”的介绍。借助书中的大量案例,你也能用 Rust 编写出兼顾安全性与高性能的程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值