7
2.3.2 Cargo与依赖项48
2.3.3 使用Cargo执行测试50
2.3.4 使用Cargo运行示例52
2.3.5 Cargo工作区53
2.4 Cargo工具扩展54
2.4.1 子命令和Cargo安装54
2.4.2 使用clippy格式化代码56
2.4.3 Cargo.toml清单文件简介57
2.5 搭建Rust开发环境60
2.6 使用Cargo构建imgtool程序63
2.7 小结66
第3章 测试、文档化和基准评估67
3.1 测试的目的67
3.2 组织测试68
3.3 单元测试71
3.3.1 第一个单元测试71
3.3.2 运行测试71
3.3.3 隔离测试代码72
3.3.4 故障测试73
3.3.5 忽略测试73
3.4 集成测试74
3.4.1 第一个集成测试74
3.4.2 共享通用代码76
3.5 文档77
3.5.1 编写文档78
3.5.2 生成和查看文档78
3.5.3 托管文档79
3.5.4 文档属性79
3.5.5 文档化测试80
3.6 基准81
3.6.1 内置的微观基准工具81
3.6.2 稳定版Rust上的基准测试83
3.7 编写和测试软件包——逻辑门模拟器86
3.8 CI集成测试与TravisCI90
3.9 小结93
第4章 类型、泛型和特征94
4.1 类型系统及其重要性94
4.2 泛型95
4.2.1 创建泛型#97
4.2.2 泛型实现99
4.2.3 泛型应用100
4.3 用特征抽象行为102
4.3.1 特征102
4.3.2 特征的多种形式108
4.4 使用包含泛型的特征——特征区间110
4.4.1 类型上的特征区间113
4.4.2 泛型函数和impl代码块
上的特征区间114
4.4.3 使用“+”将特征组合为区间115
4.4.4 特征区间与impl特征
语法116
4.5 标准库特征简介118
4.6 使用特征对象实现真正的多态性125
4.6.1 分发125
4.6.2 特征对象126
4.7 小结128
第5章 内存管理和安全性129
5.1 程序和内存130
5.2 程序如何使用内存131
5.3 内存管理及其分类132
5.4 内存分配简介133
5.4.1 堆栈133
5.4.2 堆135
5.5 内存管理的缺陷136
5.6 内存安全性137
5.7 内存安全三原则139
5.7.1 所有权139
5.7.2 通过特征复制类型144
5.7.3 借用151
5.7.4 基于借用规则的方法类型156
5.7.5 生命周期156
5.8 Rust中的指针类型164
5.8.1 引用——安全的指针164
5.8.2 原始指针165
5.8.3 智能指针165
5.8.4 引用计数的智能指针170
5.8.5 内部可变性的应用179
5.9 小结180
第6章 异常处理181
6.1 异常处理简介181
6.2 可恢复的异常183
6.2.1 Option183
6.2.2 Result187
6.3 Option/Result的组合191
6.3.1 常见的组合器191
6.3.2 组合器应用192
6.3.3 Option和Result类型之间的转换194
6.4 及早返回和运算符“?”194
6.5 不可恢复的异常196
6.6 自定义错误和Error特征199
6.7 小结204
第7章 高级概念205
7.1 类型系统简介205
7.1.1 代码块和表达式206
7.1.2 let语句209
7.1.3 循环作为表达式214
7.1.4 数字类型中的类型清晰度和符号区分215
7.1.5 类型推断217
7.1.6 类型别名218
7.2 字符串219
7.2.1 包含所有权的字符串——String220
7.2.2 借用字符串——&str222
7.2.3 字符串切片和分块223
7.2.4 在函数中使用字符串225
7.2.5 字符串拼接225
7.2.6 &str和String的应用场景226
7.3 全局值227
7.3.1 常量227
7.3.2 静态值227
7.3.3 编译期函数——constfn228
7.3.4 通过lazy_static!宏将静态值动态化229
7.4 迭代器230
7.5 高级类型235
7.5.1 不定长类型235
7.5.2 函数类型236
7.5.3 never类型“!”和函数分发236
7.5.4 联合236
7.5.5 Cow238
7.6 高级特征238
7.6.1 Sized和?Sized238
7.6.2 Borrow和AsRef238
7.6.3 ToOwned238
7.6.4 From和Into239
7.6.5 特征对象和对象安全性239
7.6.6 通用函数调用语法240
7.6.7 特征规则241
7.7 闭包进阶241
7.7.1 Fn闭包241
7.7.2 FnMut闭包242
7.7.3 FnOnce闭包242
7.8 结构体、枚举和特征中的常量243
7.9 模块、路径和导入245
7.9.1 导入245
7.9.2 再次导出245
7.9.3 隐私性246
7.10 高级匹配模式和守护246
7.10.1 匹配守护246
7.10.2 高级let构造247
7.11 强制类型转换247
7.12 类型与内存248
7.12.1 内存对齐248
7.12.2 std::mem模块249
7.13 使用serde进行序列化和反序列化251
7.14 小结252
第8章 并发253
8.1 程序执行模型253
8.2 并发254
8.2.1 并发方法255
8.2.2 缺陷257
8.3 Rust中的并发259
8.3.1 线程基础259
8.3.2 自定义线程261
8.3.3 访问线程中的数据262
8.4 线程的并发模型264
8.4.1 状态共享模型264
8.4.2 互斥267
8.4.3 通过Arc和Mutex实现共享可变性268
8.4.4 通过消息传递进行通信270
8.5 Rust中的线程安全272
8.5.1 什么是线程安全273
8.5.2 线程安全的特征273
8.5.3 Send274
8.5.4 Sync274
8.6 使用actor模型实现并发274
8.7 其他程序库277
8.8 小结278
第9章 宏与元编程279
9.1 什么是元编程?279
9.2 Rust宏的应用场景282
9.3 Rust中的宏及其类型282
9.4 使用macro_rules!创建宏286
9.5 标准库中的内置宏289
9.6 macro_rules!宏的标记类型290
9.7 宏中的重复293
9.8 宏的高级应用——为HashMap的初始化编写DSL295
9.9 宏用例——编写测试296
9.10 练习298
9.11 过程宏299
9.12 派生宏300
9.13 调试宏程序306
9.14 常用的过程宏软件包306
9.15 小结307
第10章 不安全的Rust和外部函数
接口308
10.1 安全与不安全308
10.1.1 不安全的函数和代码块311
10.1.2 不安全的特征和实现314
10.2 在Rust中调用C代码316
10.3 通过C语言调用Rust代码319
10.4 在Rust使用外部C/C++程序库322
10.5 使用PyO3构造原生Python扩展325
10.6 在Rust中为Node.js创建原生扩展328
10.7 小结332
第11章 日志333
11.1 日志记录及其重要性333
11.2 日志记录框架的需求335
11.3 日志记录框架及其特性335
11.4 日志记录方法337
11.4.1 非结构化日志记录337
11.4.2 结构化日志记录338
11.5 Rust中的日志记录338
11.5.1 log——为Rust日志记录提供外观339
11.5.2 env_logger340
11.5.3 log4rs342
11.5.4 使用slog进行结构化日志记录344
11.6 小结350
第12章 Rust与网络编程351
12.1 网络编程简介351
12.2 同步网络I/O354
12.3 异步网络I/O361
12.3.1 Rust中的异步抽象362
12.3.2 构建异步的Redis服务器364
12.4 小结368
第13章 用Rust构建Web应用
程序369
13.1 Rust中的Web应用369
13.2 用hyper进行HTTP通信370
13.2.1 hyper服务器端API——构建一个短网址服务371
13.2.2 作为客户端的hyper——构建一个URL短网址客户端374
13.2.3 Web框架376
13.3 actix-web基础知识377
13.4 使用actix-web构建一个书签API377
13.5 小结387
第14章 Rust与数据库388
14.1 数据持久性的重要性388
14.2 SQLite390
14.3 PostgreSQL395
14.4 r2d2连接池399
14.5 Postgres和dieselORM401
14.6 小结408
第15章 Rust与WebAssembly409
15.1 什么是WebAssmbly409
15.2 WebAssembly的设计目标412
15.3 WebAssembly入门412
15.3.1 在线尝试413
15.3.2 生成WebAssembly的方法413
15.4 Rust和WebAssembly414
15.4.1 Wasm-bindgen414
15.4.2 其他WebAssembly项目421
15.5 小结422
第16章 Rust与桌面应用423
16.1 GUI开发简介423
16.2 GTK+框架424
16.3 通过gtk-rs构建一个新闻类桌面应用程序425
16.4 练习437
16.5 其他新兴的UI框架437
16.6 小结438
第17章 调试439
17.1 调试简介439
17.1.1 调试器基础440
17.1.2 调试的先决条件441
17.1.3 配置GDB442
17.1.4 一个示例程序——buggie442
17.1.5 GDB基础知识443
17.1.6 在VisualStudioCode中集成GDB448
17.2 rr调试器简介452
17.3 小结454
编程语言与程序设计
Python编程 从入门到实践 第3版(图灵出品)
编程语言与程序设计
Hello算法(图灵出品)
编程语言与程序设计
C++ Primer Plus 第6版 中文版(异步图书出品)
编程语言与程序设计
C++ Primer(中文版 第5版)(博文视点出品)
编程语言与程序设计
高效C/C++调试