可信而可靠,关于Rust 的学习

喔家ArchiSelf

共 2709字,需浏览 6分钟

 ·

2023-09-18 15:54

最早接触到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 程序设计(第二版)》将会成为你的案头手册!


【参考资料与关联阅读】


浏览 421
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报