关于我们
![]() ![]() |
Rust程序设计(第2版)
本书是Rust领域经典参考书,由业内资深系统程序员编写,广受读者好评。
书中全面介绍了Rust这种新型系统编程语言——具有非常好的安全性,兼具C和C++的高性能,并大大简化了并发程序的编写。第2版对上一版内容进行了重组和完善,新增了对“异步编程”的介绍。借助书中的大量案例,你也能用Rust编写出兼顾安全性与高性能的程序。本书内容包括基本数据类型、所有权、引用、表达式、错误处理、crate与模块、结构、枚举与模式等基础知识,以及特型与泛型、闭包、迭代器、集合、字符串与文本、输入与输出、并发、异步编程、宏等进阶知识。
本书适合所有学习Rust的开发者,尤其适合系统程序员,从C++转向Rust的程序员,以及具有C、C#、Jave、Python、JavaScript等其他编程语言基础并希望学习Rust的程序员。
1.靠谱的作者团队:本书由Rust领域的资深专家编写,包括Mozilla Firefox的工程师和GitHub的工程师,他们的经验和知识为本书提供了强大的支持。
2.全面而深入的内容:本书涵盖了Rust语言的基本概念和核心特性,从基本数据类型、所有权、引用、表达式、错误处理,到更高级的特型与泛型、闭包、迭代器、集合、字符串与文本、输入与输出、并发、异步编程、宏等。这些内容不仅帮助你建立坚实的基础,也为你提供了一些实用的案例和解决方案。
3.本书不仅解释了Rust语言的特性和语法,还通过大量的案例和实践帮助你解决实际问题。无论你是在构建一个简单的程序,还是一个复杂的应用程序,你都可以从本书中找到有用的解决方案。
4.为实际应用做好准备:本书不仅适合初学者,也适合有经验的开发者。无论你是一个系统程序员,从C++转向Rust的程序员,还是具有其他编程语言基础并希望学习Rust的程序员,本书都可以为你提供实用的知识和技能,帮助你准备好面对未来的挑战。
5.第2版新增内容:本书第2版对上一版内容进行了重组和完善,新增了对“异步编程”的介绍,使读者能够更好地理解和应用Rust的新特性。
[美]吉姆·布兰迪(Jim Blandy),Mozilla Firefox工程师,Subversion版本控制系统初代设计者之一。拥有40多年编程经验,其中包括30多年自由软件开发经验,曾在GNU Emacs、GNU Debugger等项目上工作。
[美]贾森·奥伦多夫(Jason Orendorff),GitHub工程师,专注开发尚未公开的Rust项目,曾在Mozilla参与JavaScript引擎SpiderMonkey的开发。兴趣广泛,包括:语法学、烘焙、时间旅行,以及帮助人们理解复杂主题。
[美]莉奥诺拉·F. S. 廷德尔(Leonora F. S. Tindall),软件工程师、类型系统爱好者。她喜欢使用Rust等先进语言在一些关键领域构建健壮且适应性强的系统软件,特别是在医疗保健和数据所有权管理等领域。
目录
专家推荐
译者序
前言
中文版审读致谢
第 1章 系统程序员也能享受美好 1
1.1 Rust为你负重前行 2
1.2 高效并行编程 3
1.3 性能毫不妥协 3
1.4 协作无边无界 4
第 2章 Rust导览 5
2.1 rustup与Cargo 6
2.2 Rust函数 8
2.3 编写与运行单元测试 9
2.4 处理命令行参数 10
2.5 搭建Web服务器 13
2.6 并发 18
2.6.1 什么是曼德博集 19
2.6.2 解析并配对命令行参数 22
2.6.3 从像素到复数的映射 24
2.6.4 绘制曼德博集 25
2.6.5 写入图像文件 26
2.6.6 并发版曼德博程序 27
2.6.7 运行曼德博绘图器 32
2.6.8 大“安”无形 33
2.7 文件系统与命令行工具 33
2.7.1 命令行界面 34
2.7.2 读写文件 36
2.7.3 查找并替换 37
第3章 基本数据类型 39
3.1 固定宽度的数值类型 41
3.1.1 整型 42
3.1.2 检查算法、回绕算法、饱和算法和溢出算法 45
3.1.3 浮点类型 46
3.2 布尔类型 48
3.3 字符 49
3.4 元组 50
3.5 指针类型 51
3.5.1 引用 52
3.5.2 Box 52
3.5.3 裸指针 53
3.6 数组、向量和切片 53
3.6.1 数组 53
3.6.2 向量 54
3.6.3 切片 57
3.7 字符串类型 58
3.7.1 字符串字面量 58
3.7.2 字节串 59
3.7.3 内存中的字符串 60
3.7.4 String 61
3.7.5 使用字符串 62
3.7.6 其他类似字符串的类型 62
3.8 类型别名 63
3.9 前路展望 63
第4章 所有权与移动 64
4.1 所有权 65
4.2 移动 70
4.2.1 更多移动类操作 74
4.2.2 移动与控制流 75
4.2.3 移动与索引内容 75
4.3 Copy类型:关于移动的例外情况 77
4.4 Rc与Arc:共享所有权 80
第5章 引用 83
5.1 对值的引用 84
5.2 使用引用 86
5.2.1 Rust引用与C++引用 87
5.2.2 对引用变量赋值 88
5.2.3 对引用进行引用 88
5.2.4 比较引用 89
5.2.5 引用永不为空 89
5.2.6 借用任意表达式结果值的引用 89
5.2.7 对切片和特型对象的引用 90
5.3 引用安全 90
5.3.1 借用局部变量 91
5.3.2 将引用作为函数参数 93
5.3.3 把引用传给函数 95
5.3.4 返回引用 95
5.3.5 包含引用的结构体 96
5.3.6 不同的生命周期参数 98
5.3.7 省略生命周期参数 100
5.4 共享与可变 101
5.5 应对复杂对象关系 107
第6章 表达式 109
6.1 表达式语言 109
6.2 优先级与结合性 110
6.3 块与分号 112
6.4 声明 113
6.5 if与match 115
6.5.1 if let 117
6.5.2 循环 117
6.6 循环中的控制流 119
6.7 return表达式 120
6.8 为什么Rust中会有loop 121
6.9 函数与方法调用 122
6.10 字段与元素 123
6.11 引用运算符 124
6.12 算术运算符、按位运算符、比较运算符和逻辑运算符 125
6.13 赋值 125
6.14 类型转换 126
6.15 闭包 127
6.16 前路展望 127
第7章 错误处理 128
7.1 panic 128
7.1.1 展开调用栈 129
7.1.2 中止 130
7.2 Result 130
7.2.1 捕获错误 131
7.2.2 Result类型别名 132
7.2.3 打印错误 132
7.2.4 传播错误 134
7.2.5 处理多种Error类型 135
7.2.6 处理“不可能发生”的错误 136
7.2.7 忽略错误 138
7.2.8 处理main()中的错误 138
7.2.9 声明自定义错误类型 139
7.2.10 为什么是Result 140
第8章 crate与模块 141
8.1 crate 141
8.1.1 版本 144
8.1.2 创建配置文件 145
8.2 模块 145
8.2.1 嵌套模块 146
8.2.2 单独文件中的模块 147
8.2.3 路径与导入 149
8.2.4 标准库预导入 152
8.2.5 公开use声明 152
8.2.6 公开结构体字段 152
8.2.7 静态变量与常量 153
8.3 将程序变成库 153
8.4 src/bin目录 155
8.5 属性 156
8.6 测试与文档 158
8.6.1 集成测试 161
8.6.2 文档 161
8.6.3 文档测试 163
8.7 指定依赖项 166
8.7.1 版本 166
8.7.2 Cargo.lock 167
8.8 将crate发布到crates.io 168
8.9 工作空间 170
8.10 更多好资源 170
第9章 结构体 172
9.1 具名字段型结构体 172
9.2 元组型结构体 175
9.3 单元型结构体 175
9.4 结构体布局 176
9.5 用impl定义方法 177
9.5.1 以Box、Rc或Arc形式传入self 179
9.5.2 类型关联函数 179
9.6 关联常量 180
9.7 泛型结构体 181
9.8 带生命周期参数的泛型结构体 183
9.9 带常量参数的泛型结构体 183
9.10 让结构体类型派生自某些公共特型 185
9.11 内部可变性 186
第 10章 枚举与模式 190
10.1 枚举 191
10.1.1 带数据的枚举 193
10.1.2 内存中的枚举 194
10.1.3 用枚举表示富数据结构 194
10.1.4 泛型枚举 196
10.2 模式 198
10.2.1 模式中的字面量、变量和通配符 201
10.2.2 元组型模式与结构体型模式 202
10.2.3 数组型模式与切片型模式 203
10.2.4 引用型模式 204
10.2.5 匹配守卫 206
10.2.6 匹配多种可能性 206
10.2.7 使用@模式绑定 207
10.2.8 模式能用在哪里 207
10.2.9 填充二叉树 209
10.3 大局观 210
第 11章 特型与泛型 211
11.1 使用特型 213
11.1.1 特型对象 214
11.1.2 泛型函数与类型参数 215
11.1.3 使用哪一个 219
11.2 定义与实现特型 220
11.2.1 默认方法 221
11.2.2 特型与其他人的类型 222
11.2.3 特型中的Self 224
11.2.4 子特型 225
11.2.5 类型关联函数 226
11.3 完全限定的方法调用 227
11.4 定义类型之间关系的特型 228
11.4.1 关联类型(或迭代器的工作原理) 229
11.4.2 泛型特型(或运算符重载的工作原理) 231
11.4.3 impl Trait 232
11.4.4 关联常量 234
11.5 逆向工程求限界 235
11.6 以特型为基础 238
第 12章 运算符重载 239
12.1 算术运算符与按位运算符 240
12.1.1 一元运算符 242
12.1.2 二元运算符 243
12.1.3 复合赋值运算符 244
12.2 相等性比较 245
12.3 有序比较 247
12.4 Index与IndexMut 250
12.5 其他运算符 252
第 13章 实用工具特型 253
13.1 Drop 254
13.2 Sized 256
13.3 Clone 259
13.4 Copy 260
13.5 Deref与DerefMut 260
13.6 Default 263
13.7 AsRef与AsMut 264
13.8 Borrow与BorrowMut 266
13.9 From与Into 267
13.10 TryFrom与TryInto 270
13.11 ToOwned 271
13.12 Borrow与ToOwned的实际运用:谦卑的Cow 271
第 14章 闭包 273
14.1 捕获变量 274
14.1.1 借用值的闭包 275
14.1.2 “窃取”值的闭包 275
14.2 函数与闭包的类型 277
14.3 闭包性能 279
14.4 闭包与安全 280
14.4.1 “杀死”闭包 280
14.4.2 FnOnce 281
14.4.3 FnMut 282
14.4.4 对闭包的Copy与Clone 284
14.5 回调 285
14.6 高效地使用闭包 288
第 15章 迭代器 290
15.1 Iterator特型与IntoIterator特型 291
15.2 创建迭代器 292
15.2.1 iter方法与iter_mut方法 293
15.2.2 IntoIterator的实现 293
15.2.3 from_fn与successors 295
15.2.4 drain方法 296
15.2.5 其他迭代器源 297
15.3 迭代器适配器 298
15.3.1 map与filter 298
15.3.2 filter_map与flat_map 300
15.3.3 flatten 302
15.3.4 take与take_while 304
15.3.5 skip与skip_while 305
15.3.6 peekable 305
15.3.7 fuse 306
15.3.8 可逆迭代器与rev 307
15.3.9 inspect 308
15.3.10 chain 309
15.3.11 enumerate 309
15.3.12 zip 310
15.3.13 by_ref 310
15.3.14 cloned与copied 311
15.3.15 cycle 312
15.4 消耗迭代器 313
15.4.1 简单累加:count、sum和product 313
15.4.2 min与max 313
15.4.3 max_by与min_by 314
15.4.4 max_by_key与min_by_key 314
15.4.5 对条目序列进行比较 315
15.4.6 any与all 315
15.4.7 position、rposition和ExactSizeIterator 316
15.4.8 fold与rfold 316
15.4.9 try_fold与try_rfold 317
15.4.10 nth与nth_back 318
15.4.11 last 319
15.4.12 find、rfind和find_map 319
15.4.13 构建集合:collect与FromIterator 320
15.4.14 Extend特型 322
15.4.15 partition 322
15.4.16 for_each与try_for_each 323
15.5 实现自己的迭代器 324
第 16章 集合 328
16.1 概述 329
16.2 Vec
你还可能感兴趣
我要评论
|