Rust 最初是 Mozilla 员工 Graydon Hoare 在 2006 年开始做的私人项目 [1],Graydon Hoare 原来是语言工程师,会参与编译器或工具的实现但并没有参与设计,因此开始有了自己设计语言的想法 [2]。
Rust 语言的设计参考了很多其他语言,在 70 年代末和 80 年代初,编程语言有很多优秀的竞争者,许多好想法并没有转化成广泛使用的系统语言,Graydon Hoare 希望能结合现代编程语言的理论实现这些好想法 [2]。
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]:
其中生命周期、所有权等概念对于初学者来说可能难以理解,特别是“生命周期”,有 61.4% 的反馈者认为难以理解或学习困难 [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 有完善的提案流程(RFC,Request For Comments),每一个人都可以提交提案,进行开发工作的核心团队细分为专项治理语言项目、社区运营、语言核心开发、工具开发、库开发等,来管理维护各个项目的各方面事项,具体如下图 [13]:
语言在不同领域的应用则由工作组来开发维护,如嵌入式设备、游戏开发、安全响应等 [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 共有 6.8 万个注册的包,包括基础库和框架,总下载次数达到 95 亿次,下载次数较多的包涉及数值、解析器、字符解码、FFi 开发、序列化/反序列化等,其中下载次数最多的“rand”库(2015 年 2 月首次提交),下载次数已超过 8000 万 [19];第二的“syn”库为 Rust 源码解析器(2019 年 6 月首次提交),下载次数已有 7500 多万。
包数量最多的分类是如下,除了通用的命令行程序、无标准库运行、开发工具等,可以看到 Web 编程、网络编程、数据结构、密码学、嵌入式开发、异步相关的库也比较多。
# 商业应用 #
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 的设计哲学是内存安全、零成本抽象和实用性 [10],其解决的安全问题是系统开发一直以来的痛点,传统领域如网络、数据库对于安全要求越来越高,新兴领域如区块链天然对于安全性就有极高的要求,因此 Rust 才能迅速获得国内外公司的青睐,成为 C/C++ 的有力竞争者。
除了性能上的核心竞争点,Rust 开源开发和生态建设的团队工作也非常明确。Rust 基金会成立后,整体项目由基金会来支持;开发通过开源社区进行;且由于 Rust 语言的学习门槛,社区团队在尽可能完善文档,帮助更多的人成为专业的 Rust 开发者,也吸引到了大量专业人士积极参与贡献。
Rust 名字来源于一种生命力很强的真菌,Graydon Hoare 希望 Rust 语言可以覆盖在死去语言的残骸之上,吸收这些旧语言的优秀特性,像真菌一样拥有多种可以互相转化的生命形态 [32]。Rust 的名字从字形上糅合了 Trust 和 Robust,也暗示了“信任”和“鲁棒性” [10]。目前来看,Rust 确实拥有了极强的生命力,让我们期待一下 Rust 的永不休眠。
参考
END
文章评论