内容简介
第1章 新时代的语言
1.1缘起
1.2设计哲学
1.2.1内存安全
1.2.2零成本抽象
1.2.3实用性
1.3现状与未来
1.3.1语言架构
1.3.2开源社区
1.3.3发展前景
1.4 Rust代码如何执行
1.5小结
第2章 语言精要
2.1 Rust语言的基本构成
2.1.1语言规范
2.1.2编译器
2.1.3核心库
2.1.4标准库
2.1.5包管理器
2.2语句与表达式
2.3变量与绑定
2.3.1位置表达式和值表达式
2.3.2不可变绑定与可变绑定
2.3.3所有权与引用
2.4函数与闭包
2.4.1函数定义
2.4.2作用域与生命周期
2.4.3函数指针
2.4.5 CTFE机制
2.4.6闭包
2.5流程控制
2.5.1条件表达式
2.5.2循环表达式
2.5.3 match表达式与模式匹配
2.5.4 if let和while let表达式
2.6基本数据类型
2.6.1布尔类型
2.6.2基本数字类型
2.6.3字符类型
2.6.4数组类型
2.6.5范围类型
2.6.6切片类型
2.6.7 str字符串类型
2.6.8原生指针
2.6.9 never类型
2.7复合数据类型
2.7.1元组
2.7.2结构体
2.7.3枚举体
2.8常用集合类型
2.8.1线性序列:向量
2.8.2线性序列:双端队列
2.8.3线性序列:链表
2.8.4 Key-Value映射表:HashMap和BTreeMap
2.8.5集合:HashSet和BTreeSet
2.8.6优先队列:BinaryHeap
2.9智能指针
2.10泛型和trait
2.10.1泛型
2.10.2 trait
2.11错误处理
2.12表达式优先级
2.13注释与打印
2.14小结
第3章 类型系统
3.1通用概念
3.1.1类型系统的作用
3.1.2类型系统的分类
3.1.3类型系统与多态性
3.2 Rust类型系统概述
3.2.1类型大小
3.2.2类型推导
3.3泛型
3.3.1泛型函数
3.3.2泛型返回值自动推导
3.4深入trait
3.4.1接口抽象
3.4.2泛型约束
3.4.3抽象类型
3.4.4标签trait
3.5类型转换
3.5.1 Deref解引用
3.5.2 as操作符
3.5.3 From和Into
3.6当前trait系统的不足
3.6.1孤儿规则的局限性
3.6.2代码复用的效率不高
3.6.3抽象表达能力有待改进
3.7小结
第4章 内存管理
4.1通用概念
4.1.1栈
4.1.2堆
4.1.3内存布局
4.2 Rust中的资源管理
4.2.1变量和函数
4.2.2智能指针与RAII
4.2.3内存泄漏与内存安全
4.2.4复合类型的内存分配和布局
4.3小结
第5章 所有权系统
5.1通用概念
5.2所有权机制
5.3绑定、作用域和生命周期
5.3.1不可变与可变
5.3.2绑定的时间属性——生命周期
5.4所有权借用
5.5生命周期参数
5.5.1显式生命周期参数
5.5.2省略生命周期参数
5.5.3生命周期限定
5.5.4 trait对象的生命周期
5.6智能指针与所有权
5.6.1共享所有权Rc<T>和Weak<T>
5.6.2内部可变性Cell<T>和RefCell<T>
5.6.3写时复制Cow<T>
5.7并发安全与所有权
5.8非词法作用域生命周期
5.9小结
第6章 函数、闭包与迭代器
6.1函数
6.1.1函数屏蔽
6.1.2函数参数模式匹配
6.1.3函数返回值
6.1.4泛型函数
6.1.5方法与函数
6.1.6高阶函数
6.2闭包
6.2.1闭包的基本语法
6.2.2闭包的实现
6.2.3闭包与所有权
6.2.4闭包作为函数参数和返回值
6.2.5高阶生命周期
6.3迭代器
6.3.1外部迭代器和内部迭代器
6.3.2 Iterator trait
6.3.3 IntoIterator trait和迭代器
6.3.4迭代器适配器
6.3.5消费器
6.3.6自定义迭代器适配器
6.4小结
第7章 结构化编程
7.1面向对象风格编程
7.1.1结构体
7.1.2枚举体
7.1.3析构顺序
7.2常用设计模式
7.2.1建造者模式
7.2.2访问者模式
7.2.3 RAII模式
7.3小结
第8章 字符串与集合类型
8.1字符串
8.1.1字符编码
8.1.2字符
8.1.3字符串分类
8.1.4字符串的两种处理方式
8.1.5字符串的修改
8.1.6字符串的查找
8.1.7与其他类型相互转换
8.1.8回顾
8.2集合类型
8.2.1动态可增长数组
8.2.2映射集
8.3理解容量
8.4小结
第9章 构建健壮的程序
9.1通用概念
9.2消除失败
9.3分层处理错误
9.3.1可选值 Option<T>
9.3.2错误处理Result<T,E>
9.4恐慌(Panic)
9.5第三方库
9.6小结
第10章 模块化编程
10.1包管理
10.1.1使用Cargo创建包
10.1.2使用第三方包
10.1.3 Cargo.toml文件格式
10.1.4自定义Cargo
10.2模块系统
10.3从零开始实现一个完整功能包
10.3.1使用Cargo创建新项目
10.3.2使用structopt解析命令行参数
10.3.3定义统一的错误类型
10.3.4读取CSV文件
10.3.5替换CSV文件中的内容
10.3.6进一步完善包
10.4可见性和私有性
10.5小结
第11章 安全并发
11.1通用概念
11.1.1多进程和多线程
11.1.2事件驱动、异步回调和协程
11.1.3线程安全
11.2多线程并发编程
11.2.1线程管理
11.2.2 Send和Sync
11.2.3使用锁进行线程同步
11.2.4屏障和条件变量
11.2.5原子类型
11.2.6使用Channel进行线程间通信
11.2.7内部可变性探究
11.2.8线程池
11.2.9使用Rayon执行并行任务
11.2.10使用Crossbeam
11.3异步并发
11.3.1生成器
11.3.2 Future并发模式
11.3.3 async/await
11.4数据并行
11.4.1什么是SIMD
11.4.2在Rust中使用SIMD
11.5小结
第12章 元编程
12.1反射
12.1.1通过is函数判断类型
12.1.2转换到具体类型
12.1.3非静态生命周期类型
12.2宏系统
12.2.1起源
12.2.2 Rust中宏的种类
12.2.3编译过程
12.2.4声明宏
12.2.5过程宏
12.3编译器插件
12.4小结
第13章 超越安全的边界
13.1 Unsafe Rust介绍
13.1.1 Unsafe语法
13.1.2访问和修改可变静态变量
13.1.3 Union联合体
13.1.4解引用原生指针
13.2基于Unsafe进行安全抽象
13.2.1原生指针
13.2.2子类型与型变
13.2.3未绑定生命周期
13.2.4 Drop检查
13.2.5 NonNull<T>指针
13.2.6 Unsafe与恐慌安全
13.2.7堆内存分配
13.2.8混合代码内存安全架构三大原则
13.3和其他语言交互
13.3.1外部函数接口
13.3.2与C/C++语言交互
13.3.3使用Rust提升动态语言性能
13.4 Rust与WebAssembly
13.4.1 WebAssembly要点介绍
13.4.2使用Rust开发WebAssembly
13.4.3打造WebAssembly开发生态
13.5小结
附录A Rust开发环境指南
附录B Rust如何调试代码