Rust 学习计划
为什么学 Rust
- 零成本抽象 — 高级语言的表达能力,C 级别的性能
- 内存安全 — 编译期所有权系统消除 segfault / use-after-free / data race
- 生态成熟 — 包管理器 Cargo、crates.io、一流工具链
- 适用场景 — 系统编程、WebAssembly、CLI 工具、网络服务、嵌入式
学习资源
必读
| 资源 | 说明 |
|---|---|
| The Rust Book | 官方入门书,必读 |
| Rust by Example | 示例驱动的学习 |
| Rustlings | 交互式练习 (强烈推荐) |
| The Cargo Book | 构建系统和包管理 |
| Rust Standard Library | 标准库文档 |
进阶
| 资源 | 说明 |
|---|---|
| The Rustonomicon | unsafe Rust 深入 |
| Rust Reference | 语言规范 |
| Async Book | 异步编程 |
| Rust Cookbook | 常用模式速查 |
工具链
# 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 更新
rustup update
# 查看版本
rustc --version
cargo --version
学习阶段
阶段 1: 基础语法 (Week 1-2)
目标: 能看懂 Rust 代码,写简单程序
-
环境搭建
-
安装 rustup、配置编辑器 (VS Code + rust-analyzer)
-
运行
cargo new hello创建第一个项目 -
基础语法
-
变量绑定 (
let、let mut)、类型推断 - 基本类型:
i32、u64、f64、bool、char、&str、String - 函数、控制流 (
if、loop、while、for) match模式匹配-
复合类型:
struct、enum、tuple、Vec、HashMap -
练习
-
完成 Rustlings 的
variables~structs部分
阶段 2: 核心概念 — 所有权 (Week 3-4)
目标: 理解 Rust 最核心的机制
⚠️ 这是 Rust 最大的学习瓶颈,必须花时间理解
-
所有权 (Ownership)
-
所有权规则 (一个值只有一个 owner)
movevsclonevscopy- 借用 (
&T) 与可变借用 (&mut T) -
引用规则 (多个只读引用 XOR 一个可变引用)
-
生命周期 (Lifetime)
-
为什么需要生命周期标注
'a语法、生命周期省略规则- 结构体中的生命周期
-
常见生命周期错误及修复
-
练习
-
完成 Rustlings 的
move_semantics~lifetimes - 手写一个简单的链表 (不用
std::collections)
阶段 3: 错误处理与泛型 (Week 5-6)
-
错误处理
-
panic!vsResult<T, E> ?操作符Option<T>处理空值- 自定义错误类型 (
thiserror+anyhow) -
unwrap()/expect()的使用场景 -
泛型与 Trait
-
泛型函数 / 泛型 struct
- Trait 定义与实现
impl Traitvsdyn Traitderive宏-
常用 std trait:
Clone、Copy、Debug、Display、PartialEq、Default -
练习
-
用泛型和 trait 实现一个简单的数学库
阶段 4: 常用集合与迭代器 (Week 7)
-
集合
Vec<T>— 动态数组HashMap<K, V>— 哈希表String— 字符串处理 (注意 UTF-8)VecDeque<T>— 双端队列BTreeMap<K, V>— 有序映射
-
迭代器
Iteratortraititer()/iter_mut()/into_iter()- 组合子:
map、filter、fold、collect、flat_map - 惰性求值、零开销抽象
阶段 5: 模块化与包管理 (Week 8)
-
模块系统
mod、use、pub- 项目结构:
src/main.rsvssrc/lib.rs - 模块树 vs 文件树
use路径习惯
-
Cargo 深入
Cargo.toml依赖管理cargo build/cargo test/cargo runcargo doc --opencargo clippy(代码检查)cargo fmt(代码格式化)- feature flags
- workspace 管理多 crate 项目
阶段 6: 并发与异步 (Week 9-10)
-
线程
std::thread::spawnSend/Synctrait (线程安全标记)Mutex<T>/RwLock<T>Arc<T>— 线程安全的引用计数mpsc::channel— 消息传递
-
异步 (Async/Await)
async fn和.awaittokio运行时tokio::spawn/tokio::select!- async trait (1.75+)
futurescrate 常用工具
阶段 7: 实战项目 (Week 11+)
-
CLI 工具
clap— 命令行参数解析indicatif— 进度条anyhow— 错误处理
-
Web 服务
axum/actix-web— HTTP 框架sqlx— 异步数据库serde/serde_json— 序列化tokio— 异步运行时
-
FFI / 调用 C 库
关键概念速查
| 概念 | 一句话解释 |
|---|---|
| Ownership | 每个值只有一个 owner,离开作用域自动释放 |
| Borrowing | 引用某个值但不获取所有权 |
| Lifetime | 编译器保证引用不会比被引用值活得更久 |
| Move | 所有权转移,原变量失效 |
| Clone | 显式复制(深拷贝) |
| Copy | 隐式复制(栈上简单类型) |
| Trait | 类似 Go 的 interface 或 Java 的 interface |
| Enum | 带数据的枚举 (sum type),比 C enum 强大多了 |
| Pattern Matching | match 穷举所有分支,编译器检查 |
| Send | 类型可以安全地跨线程传递所有权 |
| Sync | 类型可以安全地跨线程共享引用 |
常用 Crate
| Crate | 用途 |
|---|---|
serde / serde_json | 序列化/反序列化 |
tokio | 异步运行时 |
axum / actix-web | HTTP 框架 |
sqlx / diesel | 数据库 |
clap | CLI 参数解析 |
thiserror / anyhow | 错误处理 |
reqwest | HTTP 客户端 |
tracing | 结构化日志 |
rayon | 数据并行 |
clap | CLI 构建 |
常见错误与陷阱
| 问题 | 解决方法 |
|---|---|
cannot move out of borrowed content | 用 clone() 或改变设计 |
does not live long enough | 调整生命周期或使用 Arc |
cannot borrow X as mutable more than once | 缩小借用范围或重构 |
the trait bound X: Clone is not satisfied | 添加 #[derive(Clone)] 或实现 Clone |
string vs &str 混淆 | &str 是借用,String 是拥有所有权的字符串 |
| 循环引用导致内存泄漏 | 用 Weak<T> 打破循环 |
学习建议
- 不要跳过所有权 — 这是 Rust 的核心,卡住是正常的
- 用 Rustlings 练习 — 比被动看书效率高很多
- 写代码 > 看书 — 每天写至少 50 行 Rust
- 读懂编译器错误 — Rust 的错误信息是最好的老师
- 从 CLI 工具入手 — 比 Web 项目简单,更容易上手
- 不要过早接触 unsafe — 99% 的代码不需要它
- 用 clippy —
cargo clippy教你的不仅是 lint,还有惯用法
Backlinks (1)
flowchart LR
n0["AI"]
n1["Database"]
n2["Dev Tools"]
n3["Emoji"]
n4["Frontend"]
n5["Game Dev"]
n6["Collection"]
n7["Languages"]
n8["Maps"]
n9["Media"]
n10["Monitor"]
n11["Plans"]
n12["对象存储基本用法(Bucket / Object / 常用操作)"]
n13["对象存储数据迁移(R2 → MinIO / 跨厂商搬迁)"]
n14["Object Storage"]
n15["挂载 Bucket 为本地文件系统(FUSE Mount)"]
n16["对象存储签名 URL(Signed URL)原理与实战"]
n17["对象存储供应商对比(S3 / R2 / OSS / Supabase / MinIO)"]
n18["Prototypes"]
n19["Research"]
n20["Better Auth 源码阅读指南"]
n21["DuckDB 环境与基本使用"]
n22["DuckDB 实战研究"]
n23["DuckDB 模拟数据"]
n24["PostgreSQL 数据用 DuckDB 加速查询"]
n25["HK 角色阅读"]
n26["HK 台词阅读"]
n27["Hollow Knight 英语主题"]
n28["HK 物品阅读"]
n29["HK 地点阅读"]
n30["HK 世界观 / Lore 阅读"]
n31["HK 英语学习素材清单"]
n32["英语学习 Dashboard"]
n33["English Scraps Archive"]
n34["English Scraps 使用指南"]
n35["Jellyfin 源码阅读指南"]
n36["Lux 资料整理"]
n37["Nest Commander 学习资料"]
n38["NestJS 源码阅读指南"]
n39["Protomaps 自建底图研究"]
n40["自制 PMTiles 地图(最简单例子)"]
n41["MapLibre 集成 Protomaps"]
n42["PMTiles 格式与工具链"]
n43["上海地区底图项目"]
n44["Redash 源码阅读指南"]
n45["Rust 学习计划"]
n46["shadcn/ui 源码阅读指南"]
n47["TRIP 项目核心原理与代码阅读指南"]
n1 --> n22
n6 --> n0
n6 --> n1
n6 --> n2
n6 --> n3
n6 --> n4
n6 --> n5
n6 --> n7
n6 --> n8
n6 --> n9
n6 --> n10
n6 --> n11
n6 --> n19
n12 --> n13
n12 --> n16
n12 --> n17
n12 --> n18
n13 --> n12
n13 --> n15
n13 --> n16
n13 --> n17
n14 --> n12
n14 --> n13
n14 --> n15
n14 --> n16
n14 --> n17
n15 --> n12
n15 --> n16
n15 --> n17
n16 --> n18
n17 --> n12
n17 --> n13
n17 --> n16
n17 --> n18
n18 --> n12
n18 --> n15
n18 --> n16
n18 --> n17
n18 --> n39
n19 --> n20
n19 --> n22
n19 --> n32
n19 --> n35
n19 --> n36
n19 --> n37
n19 --> n38
n19 --> n39
n19 --> n44
n19 --> n45
n19 --> n46
n19 --> n47
n21 --> n23
n22 --> n1
n22 --> n19
n22 --> n21
n22 --> n23
n22 --> n24
n23 --> n21
n23 --> n24
n24 --> n22
n24 --> n23
n27 --> n25
n27 --> n26
n27 --> n28
n27 --> n29
n27 --> n30
n27 --> n31
n27 --> n34
n31 --> n26
n32 --> n27
n32 --> n33
n32 --> n34
n34 --> n32
n34 --> n33
n39 --> n8
n39 --> n40
n39 --> n41
n39 --> n42
n39 --> n43
n40 --> n42
n41 --> n18
n41 --> n43
n42 --> n40
n42 --> n43
n43 --> n41
n43 --> n42
click n0 "../../../collection/ai/" "AI"
click n1 "../../../collection/database/" "Database"
click n2 "../../../collection/dev-tools/" "Dev Tools"
click n3 "../../../collection/emoji/" "Emoji"
click n4 "../../../collection/frontend/" "Frontend"
click n5 "../../../collection/game-dev/" "Game Dev"
click n6 "../../../collection/" "Collection"
click n7 "../../../collection/languages/" "Languages"
click n8 "../../../collection/maps/" "Maps"
click n9 "../../../collection/media/" "Media"
click n10 "../../../collection/monitor/" "Monitor"
click n11 "../../../collection/scraps/plans/" "Plans"
click n12 "../../../knowledge/infrastructure/cloud/object-storage/basic-usage/" "对象存储基本用法(Bucket / Object / 常用操作)"
click n13 "../../../knowledge/infrastructure/cloud/object-storage/data-migration/" "对象存储数据迁移(R2 → MinIO / 跨厂商搬迁)"
click n14 "../../../knowledge/infrastructure/cloud/object-storage/" "Object Storage"
click n15 "../../../knowledge/infrastructure/cloud/object-storage/mount-bucket/" "挂载 Bucket 为本地文件系统(FUSE Mount)"
click n16 "../../../knowledge/infrastructure/cloud/object-storage/signed-url/" "对象存储签名 URL(Signed URL)原理与实战"
click n17 "../../../knowledge/infrastructure/cloud/object-storage/vendors-comparison/" "对象存储供应商对比(S3 / R2 / OSS / Supabase / MinIO)"
click n18 "../../../prototypes/" "Prototypes"
click n19 "../../" "Research"
click n20 "../better-auth/" "Better Auth 源码阅读指南"
click n21 "../duckdb/basic-usage/" "DuckDB 环境与基本使用"
click n22 "../duckdb/" "DuckDB 实战研究"
click n23 "../duckdb/mock-data/" "DuckDB 模拟数据"
click n24 "../duckdb/postgresql-acceleration/" "PostgreSQL 数据用 DuckDB 加速查询"
click n25 "../english/hollow-knight/characters/" "HK 角色阅读"
click n26 "../english/hollow-knight/dialogues/" "HK 台词阅读"
click n27 "../english/hollow-knight/" "Hollow Knight 英语主题"
click n28 "../english/hollow-knight/items/" "HK 物品阅读"
click n29 "../english/hollow-knight/locations/" "HK 地点阅读"
click n30 "../english/hollow-knight/lore/" "HK 世界观 / Lore 阅读"
click n31 "../english/hollow-knight/resources/" "HK 英语学习素材清单"
click n32 "../english/" "英语学习 Dashboard"
click n33 "../english/scraps/archive/" "English Scraps Archive"
click n34 "../english/scraps/" "English Scraps 使用指南"
click n35 "../jellyfin/" "Jellyfin 源码阅读指南"
click n36 "../lux/" "Lux 资料整理"
click n37 "../nest-commander/" "Nest Commander 学习资料"
click n38 "../nestjs/" "NestJS 源码阅读指南"
click n39 "../protomaps/" "Protomaps 自建底图研究"
click n40 "../protomaps/make-own-map/" "自制 PMTiles 地图(最简单例子)"
click n41 "../protomaps/maplibre/" "MapLibre 集成 Protomaps"
click n42 "../protomaps/pmtiles/" "PMTiles 格式与工具链"
click n43 "../protomaps/shanghai-map/" "上海地区底图项目"
click n44 "../redash/" "Redash 源码阅读指南"
click n45 "./" "Rust 学习计划"
click n46 "../shadcn-ui/" "shadcn/ui 源码阅读指南"
click n47 "../trip/" "TRIP 项目核心原理与代码阅读指南"