目录
- 学习路径总览
- 阶段一:语言核心(The Book)
- 阶段二:动手练习(Rustlings + 小项目)
- 阶段三:异步与工程化
- 阶段四:方向深耕
- 必读的开源项目
- 社区资源导航
- 常见误区与坑
- 从入门到精通的 30 天计划
- 能力自测清单
1. 学习路径总览
| 阶段 | 主题 | 参考时长 | 目标 |
|---|
| 一 | 语言核心 | 2-3 周 | 所有权、借用、生命周期、trait |
| 二 | 动手练习 | 1-2 周 | Rustlings 通关 + 3 个小工具 |
| 三 | 异步与工程化 | 2-3 周 | Tokio、错误处理、测试、Cargo 工程 |
| 四 | 方向深耕 | 持续 | Web/WASM/系统编程/AI 之一深挖 |
核心原则:Rust 的学习曲线陡峭期集中在「所有权 + 借用检查器」,跨过这一关后一切豁然开朗。
2. 阶段一:语言核心(The Book)
2.1 主教材
2.2 必须吃透的核心概念
| 概念 | 一句话理解 |
|---|
| 所有权 | 每个值有且仅有一个 owner |
| 借用 | &T 共享只读,&mut T 独占写 |
| 生命周期 | 编译器保证引用不会悬垂 |
| trait | 行为契约 + 泛型约束 |
| 组合 vs 继承 | Rust 用 trait 组合替代继承 |
// 经典所有权示例
fn main() {
let s = String::from("hello");
let s2 = s; // s 被 move,之后不可用
println!("{}", s2);
let v = vec![1, 2, 3];
for x in &v { // 借用,不 move
println!("{}", x);
}
println!("v 仍可用: {:?}", v);
}
3. 阶段二:动手练习(Rustlings + 小项目)
3.1 Rustlings
# 95 道交互式小练习,编译器就是老师
git clone https://github.com/rust-lang/rustlings
cd rustlings
cargo install --force --path .
rustlings watch
Rustlings 按模块编排:variables → functions → if → move_semantics → structs → enums → modules → collections → strings → error_handling → generics → traits → threads → ...
3.2 三个练手小项目
| 项目 | 练到的点 |
|---|
grep 命令行工具 | 参数解析、文件 IO、错误处理 |
| 猜数字游戏 | 所有权、生命周期、随机数 |
| 简易 todo 管理器 | 结构体、枚举、JSON 序列化、文件持久化 |
# 一个 30 行内的小工具:词频统计
use std::collections::HashMap;
use std::io::{BufRead, BufReader};
fn main() {
let mut freq: HashMap<String, u32> = HashMap::new();
let stdin = std::io::stdin();
for line in BufReader::new(stdin.lock()).lines().flatten() {
for word in line.split_whitespace() {
*freq.entry(word.to_lowercase()).or_insert(0) += 1;
}
}
let mut pairs: Vec<_> = freq.into_iter().collect();
pairs.sort_by(|a, b| b.1.cmp(&a.1));
for (w, n) in pairs.into_iter().take(10) {
println!("{w}: {n}");
}
}
4. 阶段三:异步与工程化
4.1 异步入门
use tokio::time::sleep;
#[tokio::main]
async fn main() {
let (a, b) = tokio::join!(task("A", 2), task("B", 1));
println!("{a} {b}");
}
async fn task(name: &str, secs: u64) -> String {
sleep(std::time::Duration::from_secs(secs)).await;
format!("{name} 完成")
}
4.2 工程化五件套
| 能力 | 工具 |
|---|
| 错误处理 | anyhow + thiserror |
| 测试 | cargo test + proptest |
| 代码质量 | rustfmt + clippy |
| 日志 | tracing |
| 构建 | workspace + Cargo.lock 提交 |
5. 阶段四:方向深耕
| 方向 | 学习路径 | 代表项目 |
|---|
| Web 后端 | Axum/Actix-web → SQLx → 部署 | 博客系统、API 服务 |
| WASM | wasm-bindgen → wasm-pack → WASI | 前端组件、边缘函数 |
| 系统编程 | no_std → embedded-hal → OS 实验 | 驱动、RTOS 应用 |
| AI 推理 | candle → ONNX Runtime → 向量库 | 本地 LLM 服务 |
| CLI 工具 | clap → ratatui → cargo-dist | 开发者效率工具 |
参考本专题已有深度文章:
6. 必读的开源项目
读开源项目的顺序:README → Cargo.toml → 目录结构 → 入口 main → 核心模块 → 跑测试 → 改一个小功能。
7. 社区资源导航
7.1 讨论与问答
7.2 周报与生态
- This Week in Rust(每周精选)
- Are We Async Yet?(异步生态进度)
- Rust 官方 Blog(版本发布)
- Awesome Rust(精选库列表)
8. 常见误区与坑
| 误区 | 真相 |
|---|
| 「Rust 学不会」 | 难在借用检查,跨过后很顺 |
| 「Rust 只有内存安全」 | 零成本抽象、无 GC、并发安全同样重要 |
| 「async = 自动快」 | 异步省线程不省计算,CPU 密集要并行 |
| 「unsafe 很可怕」 | 可控的 unsafe + 抽象封装是正确用法 |
| 「一直跟新版本」 | 用 stable + 定期升级,别追 nightly |
| 「所有都用 Rust」 | 选型看场景,脚本/胶水用更快的语言 |
学习中最容易卡住的 3 个点:生命周期标注、trait 对象 vs 泛型、异步中的 Send/Sync 约束。
9. 从入门到精通的 30 天计划
第 1-7 天 The Book 第 1-11 章 + Rustlings variables/move_semantics/structs
第 8-14 天 The Book 第 12-20 章 + Rustlings generics/traits/error_handling
第 15-21 天 Rustlings 通关 + 3 个小工具 + 开始一个 CLI 项目
第 22-28 天 Tokio 异步 + 第一个 Web 服务(axum hello world → CRUD)
第 29-30 天 精读一个开源项目(如 fd)+ 写总结
10. 能力自测清单
| 能力 | 自测题 |
|---|
| 所有权 | 能解释 move/copy/clone 的区别并正确使用 |
| 借用 | 能手写通过编译的 &mut 与 & 交错代码 |
| trait | 能实现 From/Deref/Display 并解释对象安全 |
| 异步 | 能说出 await 何时阻塞、Send 约束何时出现 |
| 错误 | 能区分 Result/Option/panic 并给出设计决策 |
| 工程 | 能独立发布一个 crate 到 crates.io |
| 阅读 | 能读懂 tokio 的一个核心模块源码 |
一句话记忆:Rust 学习 = The Book 打底 + Rustlings 练手 + 3 个小项目跨过陡峭期 + 一个方向深耕 + 精读 1-2 个开源项目,30 天可入门,6 个月可上手生产。
延伸阅读
- https://plumephp.com/rust-core-concepts/ — 核心概念速览
- https://plumephp.com/rust-async-concurrency/ — 异步并发进阶
- https://plumephp.com/rust-error-handling-testing/ — 错误处理与测试
- https://plumephp.com/rust-cli-development/ — 第一个实战 CLI 项目
- [[golang]] — 另一门现代系统语言对比
- [[cpp]] — 与 C++ 的生态对比
学习 Rust 最大的回报不是「能用 Rust 写代码」,而是「建立了一套编译器替你兜底内存与并发的思维方式」。祝旅途愉快!
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。