好书推荐 好书速递 排行榜 读书文摘

深入浅出Rust

深入浅出Rust
作者:范长春
出版社:机械工业出版社
出版年:2018-08
ISBN:9787111606420
行业:其它
浏览数:3

内容简介

本书详细描述了Rust语言的基本语法,穿插讲解一部分高级使用技巧,并以更容易理解的方式解释其背后的设计思想。全书总共分五个部分。

第一部分介绍Rust基本语法,因为对任何程序设计语言来说,语法都是基础,学习这部分是理解其他部分的前提。

第二部分介绍属于Rust独一无二的内存管理方式。它设计了一组全新的机制,既保证了安全性,又保持了强大的内存布局控制力,而且没有额外性能损失。这部分是本书的重点和核心所在,也是Rust语言的思想内核精髓之处。

第三部分介绍Rust的抽象表达能力。它支持多种编程范式,以及较为强大的抽象表达能力。

第四部分介绍并发模型。在目前这个阶段,对并行编程的支持是新一代编程语言不可绕过的重要话题。Rust也吸收了业界最新的发展成果,对并发有良好支持。

第五部分介绍一些实用设施。Rust语言有许多创新,但它绝不是高高在上孤芳自赏的类型,设计者在设计过程中充分考虑了语言的工程实用性。众多在其他语言中被证明过的优秀实践被吸收了进来,有利于提升实际工作效率。

通过此书,读者能够深入透彻地理解Rust的高阶特性,比如代数类型系统、生命周期、借用检查、内部可变性、线程安全、泛型、闭包、迭代器、生成器等。可作为参考书供学生、软件工程师、研究人员以及其他对Rust语言感兴趣的读者参考。本书所揭示的Rust编程语言的设计思想对于理解其他系统编程语言,如C++,也非常有帮助。

......(更多)

作者简介

范长春,中国科学院自动化研究所博士,Rust开源项目贡献者,前微软员工。目前就职于synopsys公司参与源代码静态检查工具coverity软件的开发工作。喜欢研究编译器以及源代码静态检查。在网上撰写了大量关于Rust语言的技术文章,得到了不错的反响。

......(更多)

目录

前言

第一部分 基础知识

第1章 与君初相见 2

1.1 版本和发布策略 2

1.2 安装开发环境 4

1.3 Hello World 7

1.4 Prelude 8

1.5 Format格式详细说明 8

第2章 变量和类型 10

2.1 变量声明 10

2.1.1 变量遮蔽 12

2.1.2 类型推导 13

2.1.3 类型别名 14

2.1.4 静态变量 15

2.1.5 常量 16

2.2 基本数据类型 16

2.2.1 bool 16

2.2.2 char 17

2.2.3 整数类型 17

2.2.4 整数溢出 19

2.2.5 浮点类型 21

2.2.6 指针类型 23

2.2.7 类型转换 23

2.3 复合数据类型 24

2.3.1 tuple 25

2.3.2 struct 25

2.3.3 tuple struct 27

2.3.4 enum 29

2.3.5 类型递归定义 32

第3章 语句和表达式 34

3.1 语句 34

3.2 表达式 34

3.2.1 运算表达式 35

3.2.2 赋值表达式 37

3.2.3 语句块表达式 38

3.3 if-else 39

3.3.1 loop 40

3.3.2 while 41

3.3.3 for循环 42

第4章 函数 44

4.1 简介 44

4.2 发散函数 46

4.3 main函数 47

4.4 const fn 48

4.5 函数递归调用 49

第5章 trait 50

5.1 成员方法 50

5.2 静态方法 53

5.3 扩展方法 55

5.4 完整函数调用语法 56

5.5 trait约束和继承 58

5.6 Derive 59

5.7 trait别名 60

5.8 标准库中常见的trait简介 61

5.8.1 Display和Debug 61

5.8.2 PartialOrd / Ord /

PartialEq / Eq 62

5.8.3 Sized 63

5.8.4 Default 64

5.9 总结 65

第6章 数组和字符串 66

6.1 数组 66

6.1.1 内置方法 67

6.1.2 多维数组 67

6.1.3 数组切片 67

6.1.4 DST和胖指针 68

6.1.5 Range 70

6.1.6 边界检查 72

6.2 字符串 74

6.2.1 &str 74

6.2.2 String 75

第7章 模式解构 77

7.1 简介 77

7.2 match 78

7.2.1 exhaustive 79

7.2.2 下划线 80

7.2.3 match也是表达式 82

7.2.4 Guards 83

7.2.5 变量绑定 84

7.2.6 ref和mut 85

7.3 if-let和while-let 88

7.4 函数和闭包参数做模式解构 89

7.5 总结 90

第8章 深入类型系统 91

8.1 代数类型系统 91

8.2 Never Type 94

8.3 再谈Option类型 97

第9章 宏 102

9.1 简介macro 102

9.1.1 实现编译阶段检查 102

9.1.2 实现编译期计算 103

9.1.3 实现自动代码生成 103

9.1.4 实现语法扩展 103

9.2 示范型宏 103

9.3 宏1.1 105

第二部分 内存安全

第10章 内存管理基础 110

10.1 堆和栈 110

10.2 段错误 111

10.3 内存安全 112

第11章 所有权和移动语义 114

11.1 什么是所有权 114

11.2 移动语义 116

11.3 复制语义 118

11.4 Box类型 120

11.5 Clone VS. Copy 121

11.5.1 Copy的含义 121

11.5.2 Copy 的实现条件 121

11.5.3 Clone的含义 122

11.5.4 自动derive 123

11.5.5 总结 123

11.6 析构函数 124

11.6.1 资源管理 125

11.6.2 主动析构 126

11.6.3 Drop VS. Copy 129

11.6.4 析构标记 129

第12章 借用和生命周期 132

12.1 生命周期 132

12.2 借用 132

12.3 借用规则 134

12.4 生命周期标记 136

12.4.1 函数的生命周期标记 136

12.4.2 类型的生命周期标记 138

12.5 省略生命周期标记 139

第13章 借用检查 141

13.1 编译错误示例 142

13.2 内存不安全示例:修改枚举 143

13.3 内存不安全示例:迭代器

失效 144

13.4 内存不安全示例:悬空指针 146

13.5 小结 148

第14章 NLL(Non-Lexical-

Lifetime) 150

14.1 NLL希望解决的问题 150

14.2 NLL的原理 154

14.3 小结 157

第15章 内部可变性 158

15.1 Cell 158

15.2 RefCell 161

15.3 UnsafeCell 164

第16章 解引用 169

16.1 自定义解引用 169

16.2 自动解引用 171

16.3 自动解引用的用处 171

16.4 有时候需要手动处理 173

16.5 智能指针 175

16.5.1 引用计数 175

16.5.2 Cow 178

16.6 小结 180

第17章 泄漏 181

17.1 内存泄漏 181

17.2 内存泄漏属于内存安全 184

17.3 析构函数泄漏 185

第18章 Panic 190

18.1 什么是panic 190

18.2 Panic实现机制 191

18.3 Panic Safety 192

18.4 小结 197

第19章 Unsafe 198

19.1 unsafe关键字 198

19.2 裸指针 199

19.3 内置函数 201

19.3.1 transmute 201

19.3.2 内存读写 202

19.3.3 综合示例 204

19.4 分割借用 206

19.5 协变 209

19.5.1 什么是协变 209

19.5.2 PhantomData 211

19.6 未定义行为 214

19.7 小结 215

第20章 Vec源码分析 216

20.1 内存申请 217

20.2 内存扩容 220

20.3 内存释放 222

20.3.1 Vec的析构函数 222

20.3.2 Drop Check 223

20.4 不安全的边界 226

20.5 自定义解引用 227

20.6 迭代器 228

20.7 panic safety 231

第三部分 高级抽象

第21章 泛型 234

21.1 数据结构中的泛型 234

21.2 函数中的泛型 235

21.3 impl块中的泛型 237

21.4 泛型参数约束 237

21.5 关联类型 241

21.6 何时使用关联类型 244

21.7 泛型特化 246

21.7.1 特化的意义 247

21.7.2 default上下文关键字 248

21.7.3 交叉 impl 250

第22章 闭包 252

22.1 变量捕获 254

22.2 move关键字 256

22.3 Fn/FnMut/FnOnce 257

22.4 闭包与泛型 259

22.5 闭包与生命周期 261

第23章 动态分派和静态分派 264

23.1 trait object 265

23.2 object safe 268

23.3 impl trait 271

第24章 容器与迭代器 275

24.1 容器 275

24.1.1 Vec 275

24.1.2 VecDeque 277

24.1.3 HashMap 277

24.1.4 BTreeMap 281

24.2 迭代器 283

24.2.1 实现迭代器 283

24.2.2 迭代器的组合 284

24.2.3 for循环 285

第25章 生成器 289

25.1 简介 289

25.2 对比迭代器 291

25.3 对比立即求值 292

25.4 生成器的原理 293

25.4.1 生成器原理简介 293

25.4.2 自引用类型 297

25.5 协程简介 298

第26章 标准库简介 302

26.1 类型转换 302

26.1.1 AsRef / AsMut 302

26.1.2 Borrow / BorrowMut 303

26.1.3 From / Into 304

26.1.4 ToOwned 305

26.1.5 ToString / FromStr 305

26.2 运算符重载 306

26.3 I/O 308

26.3.1 平台相关字符串 308

26.3.2 文件和路径 309

26.3.3 标准输入输出 310

26.3.4 进程启动参数 311

26.4 Any 311

第四部分 线程安全

第27章 线程安全 314

27.1 什么是线程 314

27.2 启动线程 316

27.3 免数据竞争 317

27.4 Send & Sync 320

第28章 详解Send和Sync 321

28.1 什么是Send 321

28.2 什么是Sync 322

28.3 自动推理 323

28.4 小结 324

第29章 状态共享 325

29.1 Arc 325

29.2 Mutex 326

29.3 RwLock 328

29.4 Atomic 329

29.5 死锁 331

29.6 Barrier 333

29.7 Condvar 334

29.8 全局变量 335

29.9 线程局部存储 336

29.10 总结 337

第30章 管道 339

30.1 异步管道 339

30.2 同步管道 341

第31章 第三方并行开发库 343

31.1 threadpool 343

31.2 scoped-threadpool 344

31.3 parking_lot 345

31.4 crossbeam 345

31.5 rayon 346

第五部分 实用设施

第32章 项目和模块 350

32.1 cargo 350

32.2 项目依赖 353

32.2.1 配置 355

32.2.2 workspace 355

32.2.3 build.rs 356

32.3 模块管理 358

32.3.1 文件组织 358

32.3.2 可见性 360

32.3.3 use关键字 362

第33章 错误处理 364

33.1 基本错误处理 364

33.2 组合错误类型 366

33.3 问号运算符 367

33.4 main函数中使用问号运算符 372

33.5 新的Failure库 373

第34章 FFI 375

34.1 什么是FFI 375

34.2 从C调用Rust库 376

34.3 从Rust调用C库 378

34.4 更复杂的数据类型 378

第35章 文档和测试 381

35.1 文档 381

35.2 测试 382

附录 词汇表 387

......(更多)

读书文摘

为什么在 Rust 中永远不会出现迭代器失效这样的错误?因为通过“mutation + alias”规则,就可以完全杜绝这样的现象,这个规则是 Rust 内存安全的根,是解决内存安全问题的灵魂。Rust 不是针对各式各样的场景,用 case by case 的方式来解决内存安全问题,而是通过一种统一的机制,高屋建瓴地解决这一类问题,快刀斩乱麻,直击要害。

Danger arises from Aliasing + Mutation

......(更多)

猜你喜欢

点击查看