Skip to content

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 代码,写简单程序

  1. 环境搭建

  2. 安装 rustup、配置编辑器 (VS Code + rust-analyzer)

  3. 运行 cargo new hello 创建第一个项目

  4. 基础语法

  5. 变量绑定 (letlet mut)、类型推断

  6. 基本类型: i32u64f64boolchar&strString
  7. 函数、控制流 (ifloopwhilefor)
  8. match 模式匹配
  9. 复合类型: structenumtupleVecHashMap

  10. 练习

  11. 完成 Rustlingsvariables ~ structs 部分

阶段 2: 核心概念 — 所有权 (Week 3-4)

目标: 理解 Rust 最核心的机制

⚠️ 这是 Rust 最大的学习瓶颈,必须花时间理解

  1. 所有权 (Ownership)

  2. 所有权规则 (一个值只有一个 owner)

  3. move vs clone vs copy
  4. 借用 (&T) 与可变借用 (&mut T)
  5. 引用规则 (多个只读引用 XOR 一个可变引用)

  6. 生命周期 (Lifetime)

  7. 为什么需要生命周期标注

  8. 'a 语法、生命周期省略规则
  9. 结构体中的生命周期
  10. 常见生命周期错误及修复

  11. 练习

  12. 完成 Rustlings 的 move_semantics ~ lifetimes

  13. 手写一个简单的链表 (不用 std::collections)

阶段 3: 错误处理与泛型 (Week 5-6)

  1. 错误处理

  2. panic! vs Result<T, E>

  3. ? 操作符
  4. Option<T> 处理空值
  5. 自定义错误类型 (thiserror + anyhow)
  6. unwrap() / expect() 的使用场景

  7. 泛型与 Trait

  8. 泛型函数 / 泛型 struct

  9. Trait 定义与实现
  10. impl Trait vs dyn Trait
  11. derive
  12. 常用 std trait: CloneCopyDebugDisplayPartialEqDefault

  13. 练习

  14. 用泛型和 trait 实现一个简单的数学库

阶段 4: 常用集合与迭代器 (Week 7)

  1. 集合

    • Vec<T> — 动态数组
    • HashMap<K, V> — 哈希表
    • String — 字符串处理 (注意 UTF-8)
    • VecDeque<T> — 双端队列
    • BTreeMap<K, V> — 有序映射
  2. 迭代器

    • Iterator trait
    • iter() / iter_mut() / into_iter()
    • 组合子: mapfilterfoldcollectflat_map
    • 惰性求值、零开销抽象

阶段 5: 模块化与包管理 (Week 8)

  1. 模块系统

    • modusepub
    • 项目结构: src/main.rs vs src/lib.rs
    • 模块树 vs 文件树
    • use 路径习惯
  2. Cargo 深入

    • Cargo.toml 依赖管理
    • cargo build / cargo test / cargo run
    • cargo doc --open
    • cargo clippy (代码检查)
    • cargo fmt (代码格式化)
    • feature flags
    • workspace 管理多 crate 项目

阶段 6: 并发与异步 (Week 9-10)

  1. 线程

    • std::thread::spawn
    • Send / Sync trait (线程安全标记)
    • Mutex<T> / RwLock<T>
    • Arc<T> — 线程安全的引用计数
    • mpsc::channel — 消息传递
  2. 异步 (Async/Await)

    • async fn.await
    • tokio 运行时
    • tokio::spawn / tokio::select!
    • async trait (1.75+)
    • futures crate 常用工具

阶段 7: 实战项目 (Week 11+)

  1. CLI 工具

    • clap — 命令行参数解析
    • indicatif — 进度条
    • anyhow — 错误处理
  2. Web 服务

    • axum / actix-web — HTTP 框架
    • sqlx — 异步数据库
    • serde / serde_json — 序列化
    • tokio — 异步运行时
  3. 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> 打破循环

学习建议

  1. 不要跳过所有权 — 这是 Rust 的核心,卡住是正常的
  2. 用 Rustlings 练习 — 比被动看书效率高很多
  3. 写代码 > 看书 — 每天写至少 50 行 Rust
  4. 读懂编译器错误 — Rust 的错误信息是最好的老师
  5. 从 CLI 工具入手 — 比 Web 项目简单,更容易上手
  6. 不要过早接触 unsafe — 99% 的代码不需要它
  7. 用 clippycargo 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 项目核心原理与代码阅读指南"