面向 C/C++ 程序员的 Rust 入门课程
版权与署名说明(非官方译本) 本文档为 microsoft/RustTraining 中
c-cpp-book的中文翻译与改编版本。 译文主要由 AI 生成,未经过人工校对与修订。 原作版权归 Microsoft Corporation 所有;文档许可为 CC-BY-4.0。 本译本为社区非官方版本,不代表 Microsoft 官方立场。
课程概览
- 课程概览
- 选择 Rust 的理由(从 C 和 C++ 两个视角)
- 本地安装
- 类型、函数、控制流、模式匹配
- 模块、Cargo
- Trait、泛型
- 集合、错误处理
- 闭包、内存管理、生命周期、智能指针
- 并发
- Unsafe Rust,包括外部函数接口(Foreign Function Interface,FFI)
no_std与面向固件团队的嵌入式 Rust 要点- 案例研究:真实世界的 C++ 到 Rust 翻译模式
- 本课程不涵盖
asyncRust——请参阅配套 Async Rust Training,了解 future、执行器、Pin、tokio 及生产级异步模式
自学指南
本材料既可作为讲师授课课程,也适合自学。如果你独自学习,以下建议可帮助你充分利用:
进度建议:
| 章节 | 主题 | 建议用时 | 检查点 |
|---|---|---|---|
| 1–4 | 环境搭建、类型、控制流 | 1 天 | 能编写 CLI 温度转换器 |
| 5–7 | 数据结构、所有权 | 1–2 天 | 能解释 为什么 let s2 = s1 会使 s1 失效 |
| 8–9 | 模块、错误处理 | 1 天 | 能创建多文件项目并用 ? 传播错误 |
| 10–12 | Trait、泛型、闭包 | 1–2 天 | 能编写带 Trait 约束的泛型函数 |
| 13–14 | 并发、unsafe/FFI | 1 天 | 能用 Arc<Mutex<T>> 编写线程安全计数器 |
| 15–16 | 深入专题 | 自定进度 | 参考资料——在需要时阅读 |
| 17–19 | 最佳实践与参考 | 自定进度 | 编写真实代码时查阅 |
如何使用练习:
- 每章都有动手练习,难度标注为:🟢 入门、🟡 中级、🔴 挑战
- 务必在展开答案前先尝试练习。 与借用检查器较劲是学习的一部分——编译器的错误信息就是你的老师
- 如果卡住超过 15 分钟,展开答案、研读后关闭,再从头试一次
- Rust Playground 无需本地安装即可运行代码
遇到瓶颈时:
- 仔细阅读编译器错误信息——Rust 的错误提示非常出色
- 重读相关章节;所有权(第 7 章)等概念往往在第二遍才豁然开朗
- Rust 标准库文档 质量很高——可搜索任意类型或方法
- 异步模式请参阅配套 Async Rust Training
目录
第一部分 — 基础
1. 引言与动机
2. 快速上手
3. 基本类型与变量
4. 控制流
5. 数据结构与集合
- Rust 数组类型
- Rust 元组
- Rust 引用
- C++ 引用 vs Rust 引用——关键差异
- Rust 切片
- Rust 常量与静态变量
- Rust 字符串:
Stringvs&str - Rust 结构体
- Rust
Vec<T> - Rust
HashMap - 练习:Vec 与 HashMap
6. 模式匹配与枚举
7. 所有权与内存管理
- Rust 内存管理
- Rust 所有权、借用与生命周期
- Rust 移动语义
- Rust
Clone - Rust
CopyTrait - Rust
DropTrait - 练习:Move、Copy 与 Drop
- Rust 生命周期与借用
- Rust 生命周期标注
- 练习:带生命周期的切片存储
- 生命周期省略规则深入
- Rust
Box<T> - 内部可变性:
Cell<T>与RefCell<T> - 共享所有权:
Rc<T> - 练习:共享所有权与内部可变性
8. 模块与 Crate
- Rust crate 与模块
- 练习:模块与函数
- 工作区与 crate(包)
- 练习:使用工作区与包依赖
- 使用 crates.io 社区 crate
- Crate 依赖与 SemVer
- 练习:使用 rand crate
- Cargo.toml 与 Cargo.lock
- Cargo 测试功能
- Cargo 其他功能
- 测试模式
9. 错误处理
- 将枚举与 Option 和 Result 联系起来
- Rust
Option类型 - Rust
Result类型 - 练习:使用 Option 实现 log() 函数
- Rust 错误处理
- 练习:错误处理
- 错误处理最佳实践
10. Trait 与泛型
- Rust Trait
- C++ 运算符重载 → Rust
std::opsTrait - 练习:Logger Trait 实现
- 何时使用 enum vs
dyn Trait - 练习:翻译前先思考
- Rust 泛型
- 练习:泛型
- 结合 Rust Trait 与泛型
- 数据类型中的 Rust Trait 约束
- 练习:Trait 约束与泛型
- Rust 类型状态模式与泛型
- Rust 建造者模式
11. 类型系统高级特性
12. 函数式编程
13. 并发
14. Unsafe Rust 与 FFI
第二部分 — 深入专题
15. no_std — 裸机 Rust
16. 案例研究:真实世界的 C++ 到 Rust 翻译
- 案例研究 1:继承层次 → 枚举分发
- 案例研究 2:
shared_ptr树 → Arena/索引模式 - 案例研究 3:框架通信 → 生命周期借用
- 案例研究 4:上帝对象 → 可组合状态
- 案例研究 5:Trait 对象——何时才合适