《深入Rust标准库:必备的Rust语言高级指南》深入分析了Rust标准库的源代码,并厘清了分析Rust标准库源代码的脉络。全书共14章。第1章对Rust标准库体系进行了概述性介绍;第2章分析了Rust的一些独特性;第3~8章分析了CORE库与ALLOC库,这两个库可用于编写操作系统内核与用户态应用程序;第9~13章分析了STD库,STD库仅用于编写用户态应用程序;第14章对异步编程进行了简单分析。
《深入Rust标准库:必备的Rust语言高级指南》试图以标准库的源代码为基础分析Rust的一些最本质的内容,从而加快程序员掌握Rust的进程。Rust标准库也是Rust编码技巧、程序设计、架构设计的“结晶”,因此,本书大量篇幅集中在对这些内容的分析上。
系统性分析及设计理念精讲;用代码解析平滑Rust学习曲线
任成珺,拥有超过20年的系统级程序架构及开发经验,至今仍活跃在开发一线。
王晓娜,博士,任职于中国兵器工业集团公司北方科技信息研究所,善于深入浅出地解读艰深技术。
韩龙,硕士,任职于中信银行,从事多年IT基础设施及云服务规划与设计。
前言
我对Rust的兴趣始于一个新闻:Linux Torvalds有意向将Rust作为Linux Kernel的开发语言(Linux Kernel 6.1已经正式被纳入Rust)。开始学习Rust后,我便立刻意识到它对所有程序员的巨大价值。Rust是较理想的编程语言,使用它开发的程序在执行效率上不输于其他任何高级编程语言。同时,Rust是一门内存安全的语言,具有极高的生产力(掌握它之后),其语法会自然导出良好的程序设计与架构。Rust的缺点也是显而易见的,相比于其他语言,它明显需要程序员花费更多的时间入门,这是因为Rust把程序世界的许多奥秘放在了入门阶段。
本书目的
本书试图通过对Rust标准库源代码系统的分析,帮助读者理解标准库所定义的类型、函数,缩短读者在Rust入门阶段所花费的时间。
熟练掌握一门编程语言的最佳途径就是深入分析、学习、理解优秀的代码。Rust标准库源代码正是最理想的素材。
Rust标准库具有完善的注释,但这些注释的目的是作为标准库的指南,缺乏系统性及一些语言语法性质的内容,这促使了本书的诞生。
本书疏理了标准库源代码的脉络以便读者学习及研究,避免读者在学习Rust时陷入一团混乱中。本书对标准库源代码中与所有权、生命周期、内存安全相关的部分着重进行了注释分析,以加快读者对这3个概念的理解。本书还对每一个标准库数据类型背后的需求及解决方案思路进行了探讨,并针对Rust的某些设计理念、设计架构、设计思路进行了重点说明,以便读者理解Rust程序设计的思维和习惯。
目标读者
本书不适合初学编程的读者。本书的最佳学习对象是资深的、掌握了Rust初步语法的C/C++程序员。本书也适合已经对Rust基础语法比较熟悉的,希望对Rust有更深了解的,尤其是希望进行操作系统内核编程或通用框架编程的程序员。对于资深的Java、Python、Go程序员,可以将本书作为与其他编程语言相比较的一个参考。
阅读本书之前,读者应该已经学习过官方教程《Rust程序设计语言》。本书不是标准库参考手册,如需要参考手册,请见《Rust标准库参考手册》。
内容脉络
本书按如下脉络对Rust标准库进行分析。
Rust标准库的目录结构展示了其精细的模块化设计。CORE库、ALLOC库、STD库的分工明晰且内聚,而Rust标准库的概述包含了这些内容。
Rust具有一些自身的特征,包括泛型、内存安全框架、安全封装类型、解封装等,本书总结了这些特征。
程序员精通C语言的标志是能熟练地使用指针。Rust的裸指针是学习Rust最基础、最核心的知识点之一。本书将以裸指针为代表的内存模块作为代码分析的起点,*const T、*mut T、MaybeUninit、ManuallyDrop有助于读者理解所有权、生命周期、借用等,它们是非常重要的数据类型,只有理解了这些类型,才能攻克Rust的难点。Rust提供了开放的接口以便程序员自行设计动态内存的申请与释放机制,并使标准库所有的动态内存都可以基于此机制。
通过对标量类型、切片类型、元组类型等基本类型的分析,就能看到Rust的基本类型可以利用特征语法无限扩展自身的行为,这展现了Rust更有表现力的语法功能。本书对基本类型做了分析。
Option、Result等类型完全由标准库定义,而不是由编译器支持的Rust基本类型定义,这一点可以从本书的源代码分析中发现。
Marker Trait通常由编译器实现,也是较难理解的语言特征。因此,本书对Marker Trait进行了详细的阐述。
标准库除了加、减、乘、除及位运算,还包括下标运算、范围运算、Try运算等,所有运算符都可以重载,且可以跨越类型重载,运算符重载揭示了Rust的很多编码奥秘及技巧。
Iterator闭包是函数式编程的基础构架,Iterator适配器构成了函数式编程的基础设施,标准库完整地实现了这些内容,并且几乎为每个类型都实现了迭代器,尽可能为函数式编程做好准备。本书分析了所有基本类型的Iterator实现。
Cell、RefCell、Pin、Lazy代码阐释了在Rust的基础语法下,如何创造性地解决问题。
Rust标准库其他智能指针类型的堆内存申请及释放基本都由Box、RawVec这两个类型负责。
Rc、Arc是一个杰作,系统级的程序员会仅因为这两个类型而喜欢上Rust。
Vec、VecDeque、LinkList等智能指针类型都可用于实现经典的数据结构示例。
标准库对不同操作系统的适配能让程序员不必像使用C/C++那样重复耗费精力编写代码,节省了编程时间,提高了工作效率。
Future、Poll、Waker与Context揭示了异步编程最基础的思考和实现。
本书约定
本书的代码分析遵循了人们的阅读习惯,在代码中插入了中文注释,以便读者理解相关代码。
由于编著者写作水平有限,书中难免存在疏漏与不足之处,恳请广大读者给予批评、指正。
任成珺
2024年3月1日