最早接触到Rust是在几年前的一次技术大会上, 黄东旭说TiKV 是用Rust 语言编写的, 引起了我的一些兴趣,但只是保持关注而已。我一直认为每一种编程语言都有着各自的典型应用领域, 也有着各自的编程范式,没有最好的编程语言(参见《PHP是最好的编程语言吗?》), 但存在最适合当前的问题领域的编程语言。
个人认为,所谓全栈工程师,至少要掌握4种编程语言——C/C++,Java, JavaScript 和Python。作为一个半吊子全栈工匠,我还涉足过Go,Scala,Erlang,PHP和Perl,Shell 编程是必备技能,不放在编程语言的行列。
直到去年,自己进入操作系统的研发领域,尤其是与操作系统内核相关的那些工作,才着手系统地学习Rust编程语言。C/C++ 一直是系统编程的首选,但由于内存安全、数据竞争等引起的问题一直存在,每一次对内核的修改尝试都有些畏首畏尾,而Rust 就是为了从语言层面解决这些问题而诞生的。Rust 的设计哲学是内存安全、零成本抽象和实用性。
尤其是,2022 年 12 月 11 日发布的 Linux Kernel 6.1,最重要的变化是引入了初始的 Rust 框架代码。但高达 12k 行的代码仅带来了 Rust 基本的基础设施。有了这个基础,新的驱动程序、子系统和内核模块有望通过 Rust 编程语言登陆内核。Rust 进入 Linux 内核,对于 推动 Rust 进化具有很重要的战略意义。另外,今年5月的这条消息也证明了自己的选择存在一定的正确性。
Rust 宣称可以“赋予每个人构建可靠高效的软件的能力” , 而我更关注在实现对系统安全编程的同时对底层有控制权 。Rust 没有运行时和垃圾回收器,可以提供对性能要求很高的服务,可在嵌入式设备上运行,也可以很方便地和其他语言集成。对比 C、C++ 和 Go, Rust 的性能和 C++ 接近,快于 Go。
安全编程是最吸引我的地方。在2020 年 8 月, Rarf Jung 在他的博士论文中提供了第一个正式证据(RustBelt),证明了 Rust 的安全承诺成立 ,即使开发者有可能编写“不安全”代码,Rust 的安全声明仍然有效 。具体而言,Rust采用了所有权类型系统,每个被分配的内存都有指针,且给每个变量都设定了生命周期,一旦超出生命周期,变量就会被自动释放。另外, Rust划分了安全边界,如果要做内存不安全的事情,必须在代码中明确声明。就线程而言,由于采用 1:1 线程模型,不需要运行时,在一定程度上消除了数据竞争的现象。
客观而言,Rust 的学习曲线还是相对陡峭的。基于所有权系统来管理内存,移动(move)、借用(borrow)、生命周期(lifetime)等概念提供了很多抽象表达能力,这需要较强的理解能力,对初学者确实存在挑战。内存模型严格区分可变状态和不可变状态,颇有一些Erlang的味道,这需要新的编程范式。Rust 拥有非常严格的静态类型系统,这就要求写程序时需要细致地设计数据类型。另外,相对于C/C++,Java,Python等成熟语言而言,Rust 的生态系统还在成长中,存在较多不完整的地方。
当自己开始体会到“Rust”的一些味道的时候,有幸参与了《Rust 程序设计(第二版)》审读。因为自己也翻译过几本书,一看到书籍的页数就知道这本书的翻译是一件艰难的工作。进而,我从稿件的内容中看到了译者满满的诚意。译者雪狼那25年码农的经历和我有着太多的相似,他前前后后对稿子修订了 7 遍,虽然每一遍的重心有所不同,但每一遍都耗费了巨大的心血。很长一段时间内,独立进行翻译的雪狼每一天都会是挑灯夜战,向译者雪狼致敬!
审读群里高手很多,我不过是一个Rust的初学者,谈不上审读,更多是学习和疑问,尤其是向雪狼和群里的各位老师学习。对于《Rust 程序设计(第二版)》书中的内容,颇有相见很晚的感觉,这本书的思维导图如下:
跟着书中讲解的思路走,一步步来,就一定能掌握 Rust 的核心特性和在工作场景中的用法。书中的代码是开源的,而且基于 Rust 2021。如果我能够早学习这本书,可以避免自己走很多的弯路。
鉴于自己的认知局限,如果你是操作系统的相关开发工程师, 或者是嵌入式系统的工程师,亦或是后端服务的工程师,Rust 都会带来安全而可靠的开发效果, 《Rust 程序设计(第二版)》将会成为你的案头手册!
【参考资料与关联阅读】
- 学 Rust 最好的图书之一,原版豆瓣 9.7分“封神之作”,https://mp.weixin.qq.com/s/oTgyQ1d7hSTlVDEVrAahKQ
- Rust 生态发展之路
- Rust 官方网站 https://www.rust-lang.org/
- Rust (programming language) - wikipedia https://en.wikipedia.org/wiki/Rust(programminglanguage)
- Computer Scientist proves safety claims of the programming language Rust - Eurekalert https://www.eurekalert.org/news-releases/610682
- R. Jung, Understanding and Evolving the Rust Programming Language https://people.mpi-sws.org/~jung/phd/thesis-screen.pdf
- 全栈必备 :C语言基础
- 全栈Python 编程必备
- 全栈必备 Java基础
- 全栈必备JavaScript基础
- 老码农的运行时漫谈
- 全栈必备:系统架构设计的10个思维实验
- 全栈必备 Log日志
- 一文读懂互联网的架构本质
- 从CAP到编程语言的猜想
- 《基于混合方法的自然语言处理》译者序
- 一文读懂“语言模型”