本月初,Mozilla 联合微软、谷歌、AWS、华为四大技术厂商创立 Rust 基金会的消息成为社区热门话题,也让 Rust 这门近年兴起的编程语言热度持续升温。
回顾 OSC 近两年来对 Rust 语言的相关跟踪报道,我们整理了 Rust 语言从诞生至今的发展趋势。大厂不断押注,民间呼声高涨,这门以取代 C/C++ 为目标而诞生的语言,真的要火了吗?
起源
Rust 语言最初只是 Mozilla 员工 Graydon Hoare 在 2006 年创建的一个业余项目。在 2010 年时,Mozilla 的研发团队在 Firefox 的开发过程中遇到了瓶颈。作为一个大型的自研浏览器项目,Firefox 底层实现主要用 C++ 编写。尽管团队拥有最佳的实践经验和丰富的工程技术人才,但是在编写浏览器内核这样拥有如此复杂的高性能、并行化和内存安全要求的代码时,仍然很容易出错。据统计,Firefox 中有超过 70% 的漏洞与内存安全有关。
正是在这种情况下,时任 Mozilla 工程师的 Graydon Hoare 毛遂自荐,掏出了自己捣鼓了 4 年的新语言 Rust 。在 JS 之父 Brendan Eich 和 Dave Herman 等人的帮助下,经过团队的进一步打磨,Rust 语言也从最初的个人项目变成一个日趋成熟的现代化编程语言。2012 年,Mozilla 正式宣布将推出基于 Rust 语言开发的新浏览器引擎 Servo,这是一个以内存安全性和并发性为首要原则而构建的浏览器引擎,同时也是 Rust 语言在一个完整大型项目中的首秀。
早期的 Rust 被 Graydon 描述为“寒武纪思想和狂野实验的碰撞”。秉持着“大力出奇迹”的思想,Graydon 从 C++、OCaml、Haskell、Erlang、ML、C#、Ruby 等编程语言中吸取了大量的灵感,这些语言中的先进概念先后被加入 Rust 的特性中,这也反映了当时参与打磨 Rust 语言的工程师人数众多。尽管业内人士对 Mozilla 倾尽全力打造的这门雄心勃勃的新语言颇为赞赏,但当时的大多数人并不看好 Rust 这门新语言的发展前景。
2015 年,Mozilla 发布了 Rust 的首个稳定版本 v1.0 ,成为 Rust 一个重要的里程碑。不久之后,Firefox 于 2016 年首次在生产环境中发布了第一个由 Rust 编写的组件。从这时起,Rust 开始在业内引起了广泛的注意,尤其是其特性中令人印象深刻的安全性。
作为推出用来替代 C/C++ 的编程语言,Rust 与 C/C++ 的区别在于其强大的安全保障。除非通过使用“unsafe”关键字明确选择使用,否则 Rust 完全是内存安全的。在系统编程中,有时开发者必须执行无法静态验证为安全的操作。Rust 为开发者提供了将这些操作包装在安全抽象的工具中,这意味着 Rust 编译器可以静态地强制执行那些曾经属于代码注释或约定的操作。必须显式地标记内存不安全操作,从而极大地减少了内存安全漏洞出现的频率。
大厂支持
正是得益于注重内存安全的特性,Rust 语言近年来接连获得国内外多家大厂的公开支持。
2019 年,微软宣布将探索使用 Rust 编程语言作为 C、C++ 和其他语言的替代方案,以此来改善应用程序的安全状况,并进行了一些使用 Rust 重写 Windows 系统组件的实验。
据悉,自 2004 年以来,微软安全响应中心(MSRC)已对所有报告过的微软安全漏洞进行了分类。根据他们提供的数据,所有微软年度补丁中约有 70% 是针对内存安全漏洞的修复程序。这样高的百分比是因为 Windows 和大多数其他微软产品主要使用 C 和 C++ 编写,这两种“内存不安全”(memory-unsafe)的编程语言允许开发人员对内存地址进行细粒度控制,并且可以执行代码。管理内存执行的开发人员代码中的一个漏洞可能导致一系列内存安全错误,攻击者可以利用这些错误带来危险和侵入性后果,例如远程代码执行或权限提升漏洞。
▲微软每年约有 70% 的漏洞仍然是内存安全问题
于是,探索使用诸如 Rust 之类的内存安全(memory-safe)语言被提上日程。此外,微软还在去年宣布正在开发基于 Rust 的安全编程语言 Verona,并由 C# 项目经理 Mads Torgensen 与 Microsoft Research Cambridge 研究软件工程师 Juliana Franco 进行维护。
同年,另一家互联网大厂 AWS 在其开源博客上发文宣布赞助 Rust 语言,并陆续使用 Rust 编写了多款产品。其中,最新的一款产品是基于 Linux 的容器操作系统 — Bottlerocket。除了提供赞助外,AWS 还开始大量招聘 Rust 社区贡献者,支持 Tokio(一个用 Rust 为各种设备编写应用程序的运行时)项目的开发。去年年末,AWS 更是将 Rust 编译器团队负责人纳入麾下,进一步壮大了其内部的 Rust 团队。
AWS 方面透露,他们正在建立一个 Rust 和 Tokio 团队以支持其长期计划。AWS 的开源执行官 Matt Asay 表示,“鉴于我们对 Rust 的依赖,我们需要深厚的内部 Rust 专业知识,就像我们对 Java 和其他基础技术的需求一样。”
与 Mozilla 合作密切的谷歌也已经开始在那些对内存安全和性能要求极高的设置中使用了 Rust,包括将其用在关键的 Chrome 浏览器和 Android 系统中。去年,谷歌工程师分析了自 2015 年以来在 Chrome 稳定版分支中修复的 912 个安全错误。并发现,在这些被标记为“高”或“严重”等级的所有安全漏洞中,大约 70% 是内存管理和安全问题,这个数据与 Firefox 和微软统计的数据基本吻合,说明内存安全漏洞已经是传统编程语言开发环境中的一个普遍性问题。
今年 2 月 8 日,华为、微软、AWS、谷歌和 Mozilla 五大公司联合成立 Rust 基金会,再次将 Rust 推向了一个全新的高度。
社区认可
除了大厂入局以外,来自民间的呼声也让 Rust 近年来持续升温。
2019 年 9 月,Linux 内核维护者 Greg 表示愿意接受用 Rust 开发 Linux 驱动,到去年 7 月,Linus Torvalds 回应称可以默认启用 Rust 支持,这个全球最大的开源社区对新语言 Rust 表现出了极大的包容与积极的接纳态度。
在八月底举办的 2020 Linux Plumbers 大会上,关于 Linux 内核上游对 Rust 的开放程度成为了最热门的讨论话题。Rust 语言团队的联合负责人 Thomas 和 Gaynor,以及 Linux 内核开发者 Josh Triplett 等人参与了这场讨论,并向大家展示了截至目前的一些研究成果、想法,还有遇到的问题。
而在学术研究界,科学家们也正在转向使用 Rust。去年 5 月,位于美国马萨诸塞州波士顿 Dana-Farber 癌症研究所的生物信息学家 Heng Li 在计算生物学任务中测试了多种语言,其中涉及解析 570 万个序列记录的大规模计算任务。测试结果显示,Rust 力压 C 语言成为效率最高的编程语言。“当我们要使用多个线程编写高性能程序,同时又需要它非常快速且节省内存,那么 Rust 是理想的选择。” Li 说。
▲Rust 在学术界增长仅次于 Python
加利福尼亚大学戴维斯分校的生物信息学家 Luiz Irber 使用 Rust 来对名为 Sourmash 的工具进行重新编码,该工具可以进行基因组搜索和分类分析,从而简化研究流程。
自 2015 年以来,Rust 已经连续 5 年获得 StackOverflow 评选的最受欢迎编程语言。
叫好声中的隐忧
然而,与大厂入局、民间呼声高涨的情况相反,Rust 实际的用户增长数据却远没有想象中的那般美好。
根据最新的 TIOBE 编程语言排行榜数据显示,Rust 的占比仅为 0.49%,排名第 30 位。这个排名甚至还不如 Julia、D 语言,更别提早已跻身榜单前 15 位的 Go 了。
有意思的是,去年在 Rust 获得 StackOverflow 最受欢迎编程语言时,有 97% 的受访者表示并未使用过 Rust,他们对 Rust 语言的喜爱,仍停留在“想学习”的阶段。
造成 Rust 语言这般“叫好不叫座”的原因,很大程度上归咎于其长期为人诟病的学习难度问题。在 Rust 官方的一次调查中,当受访者被问及对于提升 Rust 的采用率有何建议时,许多人提到的一个方案是降低 Rust 的学习难度。再具体到特定主题的难度时,许多人认为 Rust 的“生命周期(Lifetimes)”难度最高,其次是 Ownership,61.4% 的受访者表示,生命周期的使用既棘手又非常困难。而这两个功能又恰恰是 Rust 内存安全特性的核心。
除了普及速度缓慢以外,Rust 团队本身在 2020 年也遭遇了诸多变故。
去年 4 月,Rust 核心开发团队成员 Steve Klabnik 在博客中透露 Rust 文档团队自从 2018 年 8 月以来就再也没有举行过文档小组会议,目前也仅剩他一人还在坚持写文档。这对于亟需降低学习曲线难度、优化官方文档的 Rust 团队来说可谓是雪上加霜。
而仅仅 4 个月之后,Mozilla 宣布由于疫情压力进行组织调整,裁员约 250 人,其中就包括一些 Rust 项目和 Rust 社区的活跃成员。尽管 Rust 官方解释称这些贡献者是以个人的身份参与社区贡献,改变雇主并不会对社区成员的身份造成影响,但这些裁员对 Rust 项目本身依然产生了很多不确定性和混乱,甚至有网友猜测 Mozilla 或将放弃 Rust 这颗冉冉升起的编程语言新星。
未来可期
经历了“动荡”的 2020,如今 Mozilla 联合四大厂商创立 Rust 基金会,让 Rust 的发展重回正轨,同时也终于打消了外界的种种猜疑。
对于 Rust 社区来说,大厂的参与能够让项目的研发和推广免去资金之忧,并拥有更大的市场潜力;另一方面,在多方参与的基金会管理模式下,也能确保 Rust 不会过分依赖任何一个赞助商,在开放治理的模式下维持开源社区的活力。
无论如何,更高的市场渗透率、更稳定的库、更好的平台支持等,才是开发者所希冀的。对于用户来说,生产力才是工作的重要目标,Rust 究竟能不能火依然取决于它的生态成熟度。
告别动荡的 2020,刚刚成立基金会并趋于稳定的 Rust 在 2021 年还将给开发者带来什么呢?(反正 Rust 1.50.0 稳定版是已经出来了。)相信年末的编程语言排行榜会给我们答案。