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),另一方面这种方式会强迫你在创建变量时思考,什么是需要变的(写)什么是不变的(只读),强迫你做出好的设计。大多数语言都有作用域(Scop)的概念,在栈上分配的变量在离开作用域后会被释放,而在 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 Russionvich 也直言 C/C++这对主流系统语言是时候下课了,Rust 才是未来的发展方向。
WebAssembly 是这两年流行的技术,可以让 Web 应用程序拥有 native 性能,Rust 是主流实现 WebAssembly 的方式,当今最强 WebAssembly 非 Figma 莫属,它就是用 Rust 做的,现在 Figma 已经被 Adobe 以 300 亿美元收购了。Figma 为什么赢了 Sketch - ruanyifeng.com
Rust 拥有不输 C++ 的性能,规避了指针问题,内存管理更安全,同时在 C++ 中可以引用 Rust,是替换 C++ 的一种方式。
Rust 是未来主流的系统编程语言吗?远不止于此,一起见证吧!