学习路线
从环境、Cargo 和基础语法开始,逐步进入所有权、建模、标准库和项目实践。
环境与学习方式
- Rust 是什么
理解 Rust 适合解决的问题,以及本教程的学习方式。
- 第一个程序:Hello World
运行最小 Rust 程序,认识 main 函数和 println! 宏。
- Cargo 基础
理解 Cargo 项目的目录、Cargo.toml 和常用命令。
基础语法
- 变量、可变性与 shadowing
理解 let、mut、const 和 shadowing 的差异。
- 标量类型与复合类型
认识整数、浮点、bool、char、tuple 和 array。
- 函数、参数与返回值
写出带参数、返回值和表达式函数体的 Rust 函数。
- 控制流
使用 if、loop、while 和 for 表达程序分支与重复。
所有权、借用和生命周期
复合类型与模式匹配
- 结构体与方法
用 struct 给数据建模,用 impl 定义方法和关联函数。
- 枚举与 Option
用带数据的枚举建模多态状态,用 Option 表达可能为空。
- 模式匹配
用 match、if let、守卫和解构写出清晰的分支逻辑。
标准库与错误处理
- 常用集合
掌握 Vec、HashMap 和 String 的常见用法。
- Result 与错误处理
用 Result 和 ? 运算符传播可恢复错误。
- 自定义错误类型
用枚举定义错误,实现 Display 和 Error trait。
泛型、trait 与闭包
- 泛型
用泛型参数写出适用于多种类型的函数和结构体。
- trait 与共享行为
用 trait 定义共享接口和默认方法。
- trait 对象与 dyn
用 Box<dyn Trait> 在运行时存放不同类型。
- 像 class 一样思考:Rust 的面向对象
Rust 没有 class,却能用 struct + impl + trait 表达封装、构造、接口、多态与继承。
- 闭包
理解闭包如何捕获环境,以及 Fn、FnMut、FnOnce 的区别。
迭代器与函数式
智能指针与内部可变性
- Box 与递归类型
用 Box<T> 把数据放到堆上,定义递归数据结构。
- Rc 共享所有权
用 Rc<T> 让多个所有者共享同一份只读数据。
- RefCell 与内部可变性
用 RefCell<T> 在只持有共享引用时修改数据。
并发与多线程
- 线程
用 thread::spawn 创建线程,用 join 收集结果。
- channel 消息传递
用 mpsc channel 在线程间安全传递数据。
- 共享状态:Arc 与 Mutex
用 Arc<Mutex<T>> 在多线程间安全共享可变数据。
模块系统、crate 与 workspace
- 模块系统
用 mod、pub 和 use 组织代码,控制可见性。
- 库 crate 与 workspace
区分 lib 与 bin,用 workspace 管理多个 crate。
测试、文档与工程质量
异步编程
- async/await 基础
用 async/await 和 tokio 运行时编写异步代码。
- 并发任务
用 join! 和 spawn 让多个异步任务并发执行。
常用生态库
- serde:序列化与反序列化
用 serde 和 serde_json 在结构体与 JSON 之间转换。
- anyhow 与 thiserror
用 thiserror 定义库错误,用 anyhow 聚合应用错误。
- clap:命令行参数解析
用 clap 的派生宏构建带校验的命令行接口。
- 引用第三方包:用 rand 生成随机数
学会在 Cargo.toml 添加依赖,并用 rand 生成随机数、骰子与随机密码。
- 用 uuid 生成唯一标识
用 uuid 生成 v4 随机 UUID、解析与格式化,给实体分配唯一 ID。
- 用 chrono 处理日期与时间
用 chrono 解析、格式化日期时间,并做日期加减与差值计算。
- 用 sha2 计算哈希
用 sha2 计算 SHA-256/512 摘要,并用 hex 编码与校验数据完整性。
- 用 regex 处理文本
用 regex 做匹配、查找、捕获组与替换,从文本里提取结构化信息。
- 用 rayon 做数据并行
把迭代器链换成 rayon 的并行迭代器,几乎零改动地利用多核加速。
- 用 itertools 增强迭代器
用 itertools 的 unique / counts / chunk_by / sorted / join 等扩展标准迭代器。
Web 与数据库
- Web 服务:axum
用 axum 构建路由和 JSON 接口,并用 oneshot 测试。
- 数据库:SQLite
用 rusqlite 操作内置 SQLite,完成增查改。
宏、unsafe 与 FFI
- 声明宏 macro_rules!
用 macro_rules! 在编译期生成重复代码。
- unsafe 基础
理解 unsafe 的能力边界,以及如何封装成安全接口。
- FFI:与 C 互操作
用 extern "C" 调用 C 函数,并把 Rust 函数导出给 C。
真实项目
- 真实项目:命令行待办应用
综合结构体、错误处理、serde 与 clap,做一个可持久化的待办 CLI。