书籍作者:任成珺 | ISBN:9787121475863 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:5843 |
创建日期:2024-06-27 | 发布日期:2024-06-27 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书深入分析了Rust标准库的源代码,并厘清了分析Rust标准库源代码的脉络。全书共14章。第1章对Rust标准库体系进行了概述性介绍;第2章分析了Rust的一些独特性;第3~8章分析了CORE库与ALLOC库,这两个库可用于编写操作系统内核与用户态应用程序;第9~13章分析了STD库,STD库仅用于编写用户态应用程序;第14章对异步编程进行了简单分析。
本书试图以标准库的源代码为基础分析Rust的一些最本质的内容,从而加快程序员掌握Rust的进程。Rust标准库也是Rust编码技巧、程序设计、架构设计的“结晶”,因此,本书大量篇幅集中在对这些内容的分析上。
任成珺
拥有超过20年的系统级程序架构及开发经验,至今仍活跃在开发一线。
王晓娜
博士,任职于中国兵器工业集团公司北方科技信息研究所,善于深入浅出地解读艰深技术。
韩龙
硕士,任职于中信银行,从事多年IT基础设施及云服务规划与设计。
本书是Rust操作系统编程指南,深入浅出地介绍了Rust语言的核心奥秘
本书由具有20年系统级程序架构及开发经验的专家领衔撰写
本书对Rust的标准库代码进行了深入分析,适合具有一定Rust经验的程序员阅读
前言
我对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
通过对标量类型、切片类型、元组类型等基本类型的分析,就能看到Rust的基本类型可以利用特征语法无限扩展自身的行为,这展现了Rust更有表现力的语法功能。本书对基本类型做了分析。
Option
Marker Trait通常由编译器实现,也是较难理解的语言特征。因此,本书对Marker Trait进行了详细的阐述。
标准库除了加、减、乘、除及位运算,还包括下标运算、范围运算、Try运算等,所有运算符都可以重载,且可以跨越类型重载,运算符重载揭示了Rust的很多编码奥秘及技巧。
Iterator闭包是函数式编程的基础构架,Iterator适配器构成了函数式编程的基础设施,标准库完整地实现了这些内容,并且几乎为每个类型都实现了迭代器,尽可能为函数式编程做好准备。本书分析了所有基本类型的Iterator实现。
Cell
Rust标准库其他智能指针类型的堆内存申请及释放基本都由Box
Rc
Vec
标准库对不同操作系统的适配能让程序员不必像使用C/C++那样重复耗费精力编写代码,节省了编程时间,提高了工作效率。
Future、Poll、Waker与Context揭示了异步编程最基础的思考和实现。
本书约定
本书的代码分析遵循了人们的阅读习惯,在代码中插入了中文注释,以便读者理解相关代码。
由于编著者写作水平有限,书中难免存在疏漏与不足之处,恳请广大读者给予批评、指正。
任成珺
2024年3月1日
目录
第1章 Rust标准库体系概述 1
1.1 CORE库 2
1.2 ALLOC库 3
1.3 STD库 4
1.4 回顾 4
第2章 Rust特征小议 5
2.1 泛型小议 6
2.1.1 基于泛型的函数及Trait 6
2.1.2 泛型约束的层次 6
2.2 Rust内存安全杂述 7
2.3 获取封装类型变量的内部变量 9
2.3.1 使用“?”运算符解封装 9
2.3.2 函数调用+自动解引用 10
2.3.3 采用闭包 10
2.3.4 获取引用 11
2.3.5 获取所有权 11
2.4 回顾 12
第3章 内存操作 13
3.1 裸指针——不安全的根源 15
3.1.1 裸指针具体实现 16
3.1.2 固有模块裸指针关联函数 18
3.1.3 裸指针操作 19
3.1.4 裸指针番外 22
3.2 MaybeUninit
3.2.1 MaybeUninit
3.2.2 ManuallyDrop
3.2.3 MaybeUninit
3.2.4 MaybeUninit
3.2.5 MaybeUninit
3.2.6 典型案例 28
3.3 裸指针再论 29
3.4 非空裸指针——NonNull
3.4.1 构造关联函数 31
3.4.2 类型转换函数 32
3.4.3 其他函数 32
3.5 智能指针的基座——Unique
3.6 mem模块函数 34
3.6.1 构造泛型变量函数 34
3.6.2 泛型变量所有权转移函数 34
3.6.3 其他函数 36
3.7 动态内存申请及释放 36
3.7.1 内存布局 36
3.7.2 动态内存申请与释放接口 38
3.8 全局变量内存探讨 42
3.9 drop总结 43
3.10 Rust所有权、生命周期、借用探讨 44
3.11 回顾 47
第4章 基本类型及基本Trait 48
4.1 固有函数库 49
4.1.1 原子操作函数 49
4.1.2 数学函数及位操作函数 49
4.1.3 指令预取优化函数、断言类函数及栈获取函数 49
4.2 基本类型分析 49
4.2.1 整数类型 50
4.2.2 浮点类型 53
4.2.3 Option
4.2.4 引用类型match语法研究 59
4.2.5 Result
4.3 基本Trait 64
4.3.1 编译器内置Marker Trait 64
4.3.2 算术运算符Trait 67
4.3.3 “?”运算符Trait 74
4.3.4 范围运算符Trait 76
4.3.5 索引运算符Trait 78
4.4 回顾 83
第5章 迭代器 84
5.1 三种迭代器 85
5.2 Iterator Trait分析 86
5.3 Iterator与其他集合类型转换 89
5.4 范围类型迭代器 90
5.5 切片类型迭代器 93
5.6 字符串类型迭代器 98
5.7 数组类型迭代器 99
5.7.1 成员本身迭代器 99
5.7.2 成员引用迭代器 101
5.8 Iterator适配器 102
5.8.1 Map适配器 102
5.8.2 Chain适配器 103
5.8.3 其他适配器 105
5.9 Option
5.10 回顾 106
第6章 基本类型(续) 107
6.1 整数类型 108
6.2 布尔类型 109
6.3 字符类型 110
6.4 字符串类型 114
6.5 切片类型 126
6.6 回顾 128
第7章 内部可变性类型 129
7.1 Borrow/BorrowMut分析 130
7.2 Cell
7.2.1 UnsafeCell
7.2.2 Cell
7.3 RefCell
7.3.1 Borrow Trait分析 136
7.3.2 BorrowMut Trait分析 138
7.3.3 RefCell
7.4 Pin
7.5 Lazy
7.6 回顾 149
第8章 智能指针 150
8.1 Box
8.2 RawVec
8.3 Vec
8.3.1 Vec
8.3.2 Vec
8.4 Rc
8.4.1 Rc
8.4.2 Weak
8.4.3 Rc
8.5 Arc
8.5.1 Arc
8.5.2 Weak
8.5.3 Arc
8.6 Cow类型分析 194
8.6.1 ToOwned Trait分析 194
8.6.2 Cow分析 195
8.7 LinkedList
8.8 String类型分析 203
8.8.1 初识String类型分析 203
8.8.2 格式化字符串分析 205
8.9 回顾 216
第9章 用户态标准库基础 217
9.1 Rust与C语言交互 218
9.1.1 C语言的类型适配 219
9.1.2 C语言的va_list类型适配 221
9.1.3 C语言字符串类型适配 222
9.1.4 OsString代码分析 228
9.2 代码工程中的一个技巧 229
9.3 内存管理之STD库 230
9.4 系统调用(SYSCALL)的封装 236
9.5 文件描述符及句柄 237
9.5.1 文件描述符所有权设计 237
9.5.2 文件逻辑操作适配层 241
9.6 回顾 244
第10章 进程管理 245
10.1 匿名管道 247
10.2 重定向实现分析 248
10.3 进程管理 251
10.3.1 OS相关适配层 251
10.3.2 对外接口层 259
10.4 回顾 263
第11章 并发编程 264
11.1 Futex分析 265
11.2 Mutex
11.2.1 OS相关适配层 267
11.2.2 OS无关适配层 269
11.2.3 对外接口层 271
11.3 Condvar类型分析 275
11.3.1 OS相关适配层 275
11.3.2 OS无关适配层 277
11.3.3 对外接口层 278
11.4 RwLock
11.4.1 OS相关适配层 280
11.4.2 OS无关适配层 286
11.4.3 对外接口层 287
11.5 Barrier类型分析 290
11.6 Once类型分析 292
11.7 OnceLock
11.8 LazyLock
11.9 线程分析 300
11.9.1 OS相关适配层 300
11.9.2 OS无关适配层 311
11.9.3 对外接口层 313
11.10 线程消息通信——MPSC 332
11.10.1 消息队列类型——Queue
11.10.2 阻塞及唤醒信号机制 336
11.10.3 一次性通信通道机制 338
11.10.4 Shared类型通道 342
11.10.5 对外接口层 350
11.11 Rust的RUNTIME 357
11.12 回顾 359
第12章 文件系统 360
12.1 OS相关适配层 361
12.1.1 路径名类型分析 361
12.1.2 普通文件操作分析 362
12.1.3 目录操作分析 371
12.2 对外接口层 377
12.3 回顾 381
第13章 I/O系统 382
13.1 标准输入Stdin类型分析 383
13.1.1 Read Trait 384
13.1.2 向量读/写类型分析 388
13.1.3 对外接口层 390
13.2 标准输出Stdout类型分析 405
13.3 网络I/O 420
13.4 回顾 420
第14章 异步编程 421
14.1 Rust协程框架简析 422
14.1.1 协程概述 422
14.1.2 Rust的I/O多路复用 423
14.2 Rust协程支持类型简析 428
14.2.1 Rust协程管理 428
14.2.2 Future Trait分析 429
14.3 回顾 434