Skip to content

学习路线

本章定位:在读任何语法之前,先把「怎么学、学到哪、怎么验证环境」讲清楚。 前置知识:任意一门编程语言(Python / Java / C# / JS / C++ / Go 均可)。

本章目标

  • 能说清 Rust 的能力边界:它解决什么问题,不解决什么问题。
  • 理解本站的组织方式与三条学习路径,选定自己的路径。
  • 用一段脚本一次性验证本机工具链(rustc/cargo/rustup/rustfmt/clippy)可用。
  • 建立「编译期思维」:Rust 把大量运行时问题前移到编译期,报错是设计的一部分,不是障碍。


Rust 是什么:一张定位表

Rust 是一门编译型、静态类型、无垃圾回收的系统级语言。它的核心卖点不是「快」(快只是结果),而是:

在没有 GC 的前提下,用编译期检查消除内存错误与数据竞争。

这句话拆开是三件事:

  1. 无 GC:内存的释放时机由所有权规则在编译期决定,运行期没有追踪式回收器(对比 Java/Python/Go)。
  2. 内存安全:空指针、悬垂指针、双重释放、缓冲区溢出在安全代码里不可能发生(不是「很难发生」,是编译不过)。
  3. 无畏并发:数据竞争(data race)同样是编译期错误。

它和其他语言的关系

语言内存管理类型检查并发安全保证典型定位
C / C++手动 / RAII编译期(弱)极致控制,错误代价高
Rust编译期所有权 + RAII编译期(强)编译期排除数据竞争「C++ 的性能,编译期的安全」
Go并发 GC编译期(接口宽松)运行期 -race 检测网络服务,简单优先
Java / C#分代 GC编译期 + 运行期运行期检测为主企业应用,JIT 优化
Python / Ruby引用计数 + GC运行期(鸭子类型)GIL 掩盖了部分问题脚本、数据、胶水
JS / TSGCTS 编译期(可逃逸)单线程事件循环为主前端与 Node 服务

💡 对照:如果你写过 C++,Rust 的 Box<T>std::unique_ptrRc<T>std::shared_ptr(但不处理循环)、Arc<T> ≈ 线程安全的 shared_ptrDrop ≈ 析构函数、move 语义 ≈ 右值引用 + 移动构造且默认生效。 如果你写过 Java,最大的心智冲击是:赋值可能让原变量失效(move),以及没有 null(用 Option<T> 代替)。

Rust 不擅长什么(提前说清楚)

  • 极致编译速度:单态化 + 借用检查让编译比 Go 慢得多;大项目 cargo check 常需数十秒到数分钟。
  • 快速原型:严格类型与所有权会让「先随便写写」变慢(但后期重构更快)。
  • 学习曲线:前两周通常是最难受的,〈所有权〉和〈泛型与生命周期〉是两道坎。


学 Rust 的正确姿势(针对有经验的人)

你已经会别的语言,所以真正的难点不是「语法」,而是三件事:

  1. 改掉旧习惯:不要先写出来再想借用问题。Rust 要求你先想清楚「谁拥有这份数据、谁只是借用」。
  2. 把报错当文档读:rustc 的错误信息质量是同类语言里最好的,每一条都带 help:不要绕过报错,要读懂它。
  3. 接受「编译期付出,运行期收获」:Rust 的很多设计(显式 clone()?mut 标记)是在让代价可见,不是啰嗦。

三条具体建议:

  • 每章练习必须手敲:阅读获得的「我懂了」是幻觉,编译通过才算懂。
  • 不要过早用 clone() 止血:先用 clone() 让程序跑起来是可以的,但跑通后必须回头想这一段该不该 clone。〈所有权〉一章会专门讲这个方法论。
  • 不要一开始就学 async:async 会同时考验所有权、生命周期、trait、闭包,基础不牢会变成「背 API」。按目录顺序来。

⚠️ 陷阱:不要用 AI/搜索「直接给我能跑的完整代码」来解决练习。Rust 的收益恰恰来自你被借用检查器拦住的那几十次。



三条学习路径

路径顺序适合
快速上手学习路线 → 环境搭建 → 变量与流程控制 → 所有权 → 结构体与 trait → 错误处理 → 工程化(模块 / serde / clap 部分)想尽快写出能用的命令行工具
系统学习从学习路线到〈测试、性能与 unsafe〉全部读完,练习全做想真正掌握这门语言(推荐)
Async 后端学习路线 → 变量与流程控制 → 所有权 → 结构体与 trait → 错误处理 → 泛型与生命周期 → 智能指针与闭包 → 并发 → 异步 → 工程化目标是 axum/sqlx 写服务

时间预期(每天 2 小时):

  • 路径 1:约 2 周
  • 路径 2:约 8 周(〈所有权〉〈泛型与生命周期〉〈异步编程〉三章各留出额外 2~3 天反复读)
  • 路径 3:约 6 周

每章最后的「练习与自测」页里有一份自测清单,全部勾完再进入下一章;配合下面的 8 周表安排节奏。



学习节奏建议(8 周表)

内容交付物(自测)
1学习路线、环境搭建、变量与流程控制能解释「语句 vs 表达式」,能写带 match 的小程序
2〈所有权〉一章(重点)能徒手说出 E0382/E0502 的成因与至少两种修法
3结构体与 trait、集合与迭代器能用 enum + trait 建模一个领域对象;能用迭代器完成词频统计
4错误处理、泛型与生命周期能设计一个 enum 错误类型并用 ? 贯穿调用链
5〈智能指针与闭包〉一章能解释 Rc<RefCell<T>> 为什么能绕过借用检查,代价是什么
6〈并发编程〉一章能用 Arc<Mutex<_>> 写多线程共享状态并解释为何无数据竞争
7〈异步编程〉一章能用 join!/select!/Semaphore 写并发任务
8宏、工程化、测试与性能 + 附录能写一个带测试、文档、clap 参数、serde 序列化的小项目

建议每周留半天做复习:重读上周章节的「自测清单」,把当时靠猜做对的练习重做一遍。



如何高效查资料

遇到问题时,按这个顺序找答案(顺序很重要,越靠前越权威且越省时间):

  1. 编译器本身cargo check 的输出 + cargo explain E0382 + rustc --explain E0502
  2. 本站附录附录 B 报错速查(按错误码或症状查)。
  3. 标准库文档rustup doc 离线打开(官方);查第三方 crate 的 API 用 docs.rs。
  4. 官方书与中文教程:The Rust Programming Language 是最权威的入门教材(有社区中文译版);中文社区教程首推 Rust 圣经,专题比官方书更深。
  5. 例子集、语法规范、unsafe 深入读物、书单与练习平台的完整清单,见附录 D · 学习资源与文档索引

⚠️ 陷阱:搜索引擎结果常混入旧版本写法(例如 try! 宏、#[async_trait] 已成为历史方案、lazy_static 已被 std::sync::LazyLock 取代)。判断标准:优先看 doc.rust-lang.org 与 crate 的 docs.rs 页面顶部的版本号



延伸阅读

内容以 rustc 1.98.1 · Rust 2024 edition 为基准