Rust语言笔记
本文不讨论是否选择 Rust,只做 Rust 介绍以及它最新动态的陈述,另外一些资料我会列在文末。
系统级开发语言一直是 C/C++ 的代名词。C 语言偏低层,缺少类似 C++ 标准模板库这样的利器;虽然 C++ 开发效率高,但是复杂很难精通。而 Rust 语言同时兼顾了 C 和 C++,既有低层控制硬件的能力,又有高级语言的语法特性,例如面向对象、泛型等。
Rust 是一门静态语言,其源文件编译后可以不依赖 SDK 运行;Rust 具有安全的内存管理并且没有 GC。对于系统级别软件(文件系统、系统内核、驱动…)而言,是不允许存在 Stop The World(俚语,暂停整个程序)的。对于内存管理的苦楚恐怕只有 C/C++ 程序员最清楚,常常引发问题的就是这块;Rust 以其独有的方法在编译前就解决了这块,相当于拥有了自动内存管理。
Rust 的杀手锏 —— 数据权限。Rust 中创建的变量有“拥有”的概念,拥有者可以读/写,可以有多个读但同时只能有一个写。这种方式一方面从底层避免了某些潜在错误,例如数据竞争(Data Race);另一方面这种方式会强迫你在创建变量时思考,什么是需要变的(写)、什么是不变的(只读),强迫你做出好的设计。大多数语言都有作用域(Scope)的概念,在栈上分配的变量在离开作用域后会被释放,而在 Rust 中离开作用域不仅可以释放栈上的变量,还可以释放堆中的;结合数据权限就大致构成了 Rust 的自动内存管理,这也是为什么 Rust 没有 GC 但可以进行内存管理的原因。
Rust 适用于系统级别的软件开发,如文件系统、驱动、系统内核,也适合开发一些高性能的中间件。MadFS 是清华大学从 0 到 1 开发的一个分布式文件系统,用 Rust 语言开发,结合 SSD 技术和对底层文件系统架构的优化,在 IO500 取得第一名。令人意外的是 MadFS 竟然超越了 Intel 经过硬件优化的方案,据了解 Intel 的固态硬盘是通过某种技术插在内存接口上的。Rust 用来实现操作系统微内核,清华大学使用大约 1 万行 Rust 代码实现 Google Fuchsia OS 的大约 10 万行 C++ 内核,其性能相当。

一些重要事件:
- Rust 1.0 发布于 2015 年 5 月 15 日;
- 2021 年 2 月 8 日,AWS、华为、Google、微软以及 Mozilla 宣布成立 Rust 基金会;
- 2022 年 9 月 19 日,Linux 创始人 Linus Torvalds 表示 Rust 将进入 Linux 6.1 内核;
- 2022 年 9 月,Cloudflare 用 Rust 实现高性能代理服务器 Pingora,发现仅有的几次崩溃不是 Pingora 造成的,而是其他如操作系统内核等原因。
- 2022 年 10 月,微软 Azure 首席技术官 Mark Russinovich 也直言 C/C++ 这对主流系统语言是时候下课了,Rust 才是未来的发展方向。
WebAssembly 是这两年流行的技术,可以让 Web 应用程序拥有 native 性能,Rust 是主流实现 WebAssembly 的方式,当今最强 WebAssembly 非 Figma 莫属,它就是用 Rust 做的,现在 Figma 已经被 Adobe 以 300 亿美元收购了。Figma 为什么赢了 Sketch - ruanyifeng.com
Rust 拥有不输 C++ 的性能,规避了指针问题,内存管理更安全,同时在 C++ 中可以引用 Rust,是替换 C++ 的一种方式。
Rust 是未来主流的系统编程语言吗?远不止于此,一起见证吧!