《Rust编程之道》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:张汉东著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2019
  • ISBN:9787121354854
  • 页数:556 页
图书介绍:本书从设计哲学出发,探索Rust语言内在一致性;从源码分析入手,探索Rust地道的编程风格;从工程角度着手,探索Rust对健壮性的支持;从底层原理开始,探索Rust内存安全的本质。书中结合各种实例,串连Rust的各种概念,让Rust初学者学习曲线不再陡峭,可以让初学者快速上手,并且能对Rust有一个比较深入的认识。

第1章 新时代的语言 1

1.1缘起 1

1.2设计哲学 3

1.2.1内存安全 3

1.2.2零成本抽象 4

1.2.3实用性 5

1.3现状与未来 7

1.3.1语言架构 8

1.3.2开源社区 9

1.3.3发展前景 9

1.4 Rust代码如何执行 10

1.5小结 10

第2章 语言精要 11

2.1 Rust语言的基本构成 11

2.1.1语言规范 11

2.1.2编译器 12

2.1.3核心库 12

2.1.4标准库 12

2.1.5包管理器 13

2.2语句与表达式 13

2.3变量与绑定 14

2.3.1位置表达式和值表达式 15

2.3.2不可变绑定与可变绑定 15

2.3.3所有权与引用 16

2.4函数与闭包 17

2.4.1函数定义 17

2.4.2作用域与生命周期 18

2.4.3函数指针 19

2.4.5 CTFE机制 20

2.4.6闭包 20

2.5流程控制 22

2.5.1条件表达式 22

2.5.2循环表达式 23

2.5.3 match表达式与模式匹配 24

2.5.4 if let和while let表达式 25

2.6基本数据类型 26

2.6.1布尔类型 26

2.6.2基本数字类型 26

2.6.3字符类型 27

2.6.4数组类型 28

2.6.5范围类型 29

2.6.6切片类型 29

2.6.7 str字符串类型 30

2.6.8原生指针 31

2.6.9 never类型 31

2.7复合数据类型 32

2.7.1元组 32

2.7.2结构体 33

2.7.3枚举体 36

2.8常用集合类型 38

2.8.1线性序列:向量 38

2.8.2线性序列:双端队列 39

2.8.3线性序列:链表 40

2.8.4 Key-Value映射表:HashMap和BTreeMap 40

2.8.5集合:HashSet和BTreeSet 41

2.8.6优先队列:BinaryHeap 42

2.9智能指针 42

2.10泛型和trait 43

2.10.1泛型 43

2.10.2 trait 44

2.11错误处理 47

2.12表达式优先级 48

2.13注释与打印 48

2.14小结 50

第3章 类型系统 51

3.1通用概念 51

3.1.1类型系统的作用 51

3.1.2类型系统的分类 52

3.1.3类型系统与多态性 53

3.2 Rust类型系统概述 53

3.2.1类型大小 53

3.2.2类型推导 58

3.3泛型 60

3.3.1泛型函数 60

3.3.2泛型返回值自动推导 62

3.4深入trait 62

3.4.1接口抽象 63

3.4.2泛型约束 69

3.4.3抽象类型 71

3.4.4标签trait 77

3.5类型转换 83

3.5.1 Deref解引用 83

3.5.2 as操作符 86

3.5.3 From和Into 88

3.6当前trait系统的不足 89

3.6.1孤儿规则的局限性 90

3.6.2代码复用的效率不高 91

3.6.3抽象表达能力有待改进 93

3.7小结 94

第4章 内存管理 95

4.1通用概念 95

4.1.1栈 96

4.1.2堆 99

4.1.3内存布局 101

4.2 Rust中的资源管理 103

4.2.1变量和函数 103

4.2.2智能指针与RAII 106

4.2.3内存泄漏与内存安全 110

4.2.4复合类型的内存分配和布局 115

4.3小结 117

第5章 所有权系统 119

5.1通用概念 120

5.2所有权机制 123

5.3绑定、作用域和生命周期 125

5.3.1不可变与可变 126

5.3.2绑定的时间属性——生命周期 127

5.4所有权借用 131

5.5生命周期参数 135

5.5.1显式生命周期参数 136

5.5.2省略生命周期参数 143

5.5.3生命周期限定 145

5.5.4 trait对象的生命周期 145

5.6智能指针与所有权 146

5.6.1共享所有权Rc<T>和Weak<T> 149

5.6.2内部可变性Cell<T>和RefCell<T> 151

5.6.3写时复制Cow<T> 153

5.7并发安全与所有权 156

5.8非词法作用域生命周期 157

5.9小结 161

第6章 函数、闭包与迭代器 162

6.1函数 162

6.1.1函数屏蔽 164

6.1.2函数参数模式匹配 164

6.1.3函数返回值 165

6.1.4泛型函数 166

6.1.5方法与函数 167

6.1.6高阶函数 168

6.2闭包 171

6.2.1闭包的基本语法 172

6.2.2闭包的实现 173

6.2.3闭包与所有权 178

6.2.4闭包作为函数参数和返回值 184

6.2.5高阶生命周期 190

6.3迭代器 194

6.3.1外部迭代器和内部迭代器 194

6.3.2 Iterator trait 195

6.3.3 IntoIterator trait和迭代器 199

6.3.4迭代器适配器 202

6.3.5消费器 207

6.3.6自定义迭代器适配器 211

6.4小结 214

第7章 结构化编程 216

7.1面向对象风格编程 217

7.1.1结构体 217

7.1.2枚举体 225

7.1.3析构顺序 230

7.2常用设计模式 233

7.2.1建造者模式 234

7.2.2访问者模式 236

7.2.3 RAII模式 239

7.3小结 243

第8章 字符串与集合类型 244

8.1字符串 244

8.1.1字符编码 244

8.1.2字符 247

8.1.3字符串分类 249

8.1.4字符串的两种处理方式 251

8.1.5字符串的修改 253

8.1.6字符串的查找 256

8.1.7与其他类型相互转换 265

8.1.8回顾 270

8.2集合类型 271

8.2.1动态可增长数组 271

8.2.2映射集 281

8.3理解容量 289

8.4小结 292

第9章 构建健壮的程序 294

9.1通用概念 294

9.2消除失败 295

9.3分层处理错误 297

9.3.1可选值 Option<T> 298

9.3.2错误处理Result<T,E> 302

9.4恐慌(Panic) 314

9.5第三方库 316

9.6小结 319

第10章 模块化编程 320

10.1包管理 321

10.1.1使用Cargo创建包 321

10.1.2使用第三方包 323

10.1.3 Cargo.toml文件格式 331

10.1.4自定义Cargo 337

10.2模块系统 339

10.3从零开始实现一个完整功能包 344

10.3.1使用Cargo创建新项目 345

10.3.2使用structopt解析命令行参数 345

10.3.3定义统一的错误类型 347

10.3.4读取CSV文件 348

10.3.5替换CSV文件中的内容 351

10.3.6进一步完善包 353

10.4可见性和私有性 358

10.5小结 360

第11章 安全并发 362

11.1通用概念 362

11.1.1多进程和多线程 363

11.1.2事件驱动、异步回调和协程 364

11.1.3线程安全 365

11.2多线程并发编程 370

11.2.1线程管理 371

11.2.2 Send和Sync 375

11.2.3使用锁进行线程同步 379

11.2.4屏障和条件变量 384

11.2.5原子类型 386

11.2.6使用Channel进行线程间通信 388

11.2.7内部可变性探究 397

11.2.8线程池 399

11.2.9使用Rayon执行并行任务 407

11.2.10使用Crossbeam 409

11.3异步并发 412

11.3.1生成器 413

11.3.2 Future并发模式 418

11.3.3 async/await 421

11.4数据并行 428

11.4.1什么是SIMD 429

11.4.2在Rust中使用SIMD 430

11.5小结 434

第12章 元编程 435

12.1反射 436

12.1.1通过is函数判断类型 436

12.1.2转换到具体类型 437

12.1.3非静态生命周期类型 439

12.2宏系统 440

12.2.1起源 440

12.2.2 Rust中宏的种类 441

12.2.3编译过程 442

12.2.4声明宏 445

12.2.5过程宏 458

12.3编译器插件 472

12.4小结 475

第13章 超越安全的边界 477

13.1 Unsafe Rust介绍 477

13.1.1 Unsafe语法 478

13.1.2访问和修改可变静态变量 480

13.1.3 Union联合体 480

13.1.4解引用原生指针 483

13.2基于Unsafe进行安全抽象 484

13.2.1原生指针 484

13.2.2子类型与型变 489

13.2.3未绑定生命周期 494

13.2.4 Drop检查 495

13.2.5 NonNull<T>指针 505

13.2.6 Unsafe与恐慌安全 508

13.2.7堆内存分配 508

13.2.8混合代码内存安全架构三大原则 510

13.3和其他语言交互 510

13.3.1外部函数接口 510

13.3.2与C/C++语言交互 514

13.3.3使用Rust提升动态语言性能 528

13.4 Rust与WebAssembly 532

13.4.1 WebAssembly要点介绍 533

13.4.2使用Rust开发WebAssembly 539

13.4.3打造WebAssembly开发生态 541

13.5小结 543

附录A Rust开发环境指南 544

附录B Rust如何调试代码 549