📚 Rust 课程系列

  1. 课程概览(本文)
  2. 基础语法(一):变量、数据类型与字符串
  3. 切片(Slice):序列的借用视图
  4. 基础语法(二):运算符、表达式与控制流
  5. 函数与输入输出
  6. 所有权、借用与生命周期
  7. 结构体
  8. 枚举
  9. 模式匹配
  10. 类型系统:泛型、trait 与多态
  11. 集合与容器
  12. 错误处理与 Panic 恢复
  13. 模块、属性与宏
  14. 智能指针、迭代器与闭包
  15. 并发与异步编程
  16. Unsafe Rust 与常用 trait 详解
  17. 工具链、Cargo 与外部 crate
  18. 最佳实践、性能与调试

共 18 篇正文

为什么选择 Rust

Rust 由 Mozilla 发起,1.0 于 2015 年发布,现已是系统编程领域不可忽视的语言。它连续多年在 Stack Overflow 开发者调查中被评为「最受喜爱语言」,并进入 Linux 内核、Windows 内核组件、Cloudflare、Discord、字节跳动等大量基础设施项目。

它真正解决的问题只有一个:在不牺牲性能的前提下消除内存安全与并发安全的隐患

🔄 对比:C/C++ 把内存管理交给程序员,带来悬垂指针、双重释放、数据竞争等缺陷;Java/Go/Python 用 GC 规避了大部分内存错误,却以运行时开销和不可预测的停顿为代价。Rust 通过**所有权(Ownership)借用检查器(Borrow Checker)**在编译期静态保证内存与线程安全——无 GC,零运行时开销。

💡 提示:Rust 的核心设计哲学是"零成本抽象"——不为未使用的特性付出代价。

选择 Rust 的典型场景:

  • 底层与高性能场景:操作系统组件、驱动、数据库、游戏引擎、嵌入式。
  • 对延迟与可预测性敏感的服务:高频交易、实时音视频、网关与代理。
  • WebAssembly:Rust 是编译到 wasm 的一等公民。
  • 命令行工具:用 Rust 重写日常脚本工具,获得单文件分发与极速启动。
  • 替代 C/C++ 又害怕内存安全问题时:Rust 是目前最成熟的答案。

⚠️ 注意:Rust 并非银弹。它有陡峭的学习曲线(尤其是所有权与生命周期)、较长的编译时间,以及与 C++ 生态互通的额外成本(FFI 边界需要手动管理)。本课程会如实指出这些代价。

Rust 是什么

一句话概括:Rust 是一门注重内存安全、零成本抽象与并发性能的系统编程语言。核心特征速览:

特征一句话说明对应章节
所有权系统编译期规则管理资源生命周期,无 GC第 4 章
零成本抽象迭代器、泛型、trait 编译后无运行时开销第 8、12 章
强类型 + 类型推断编译器挡住大量错误,同时不必处处手写类型第 1、8 章
没有空指针Option<T> 表达可能缺失的值,Result<T, E> 表达可能失败的操作第 10 章
现代工具链cargo 一站式管理构建、依赖、测试、文档与格式化第 15 章
无畏并发Send/Sync trait 让线程安全成为编译期属性第 13 章

🔄 对比:Rust 的 Option<T> ≈ Haskell 的 Maybe / Swift 的 Optional,但 Rust 没有 null 引用,编译器强制处理"值可能不存在"。Result<T, E> ≈ Go 的 (value, error) 多返回值,通过 ? 运算符实现零样板错误传播。

下图为 Rust 三层心智模型,可据此定位后续各章坐标:

1
2
3
4
5
6
7
8
9
10
11
┌────────────────────────────────────────────┐
│ Rust's Three-Layer Core │
├────────────────────────────────────────────┤
│ 1. Ownership / Borrowing / Lifetimes │ → Ch. 4
│ (how memory lives) │
│ 2. Type System / Trait / Generics │ → Ch. 5-8
│ (how behaviors are reused) │
│ 3. Error Handling / Concurrency Model │ → Ch. 10, 13
│ (failure & parallelism) │
└────────────────────────────────────────────┘
↑ cargo / modules / macros / toolchain ↑ → Ch. 11, 15

💡 提示:三层内核并非孤立–所有权决定类型系统能做出哪些承诺(如 Send 依赖所有权规则),类型系统又为错误处理提供 Result/Option 基础。理解这三层的依赖关系,比单独记住每个特性更重要。

Rust 的版本与 Edition

Rust 的「版本」有两层含义,初学者常混淆:一是工具链的发布版本,二是语言的Edition(版次)

发布节奏:Rust 采用「火车模型」,每 6 周发布一个稳定版,版本号稳步递增、永不破坏已发布代码的兼容性。工具链分三个通道:

  • stable:稳定通道,适合生产环境,rustup default stable
  • beta:候选通道,从 nightly 冻结而来,用于上线前回归测试。
  • nightly:每日构建,独占尚未稳定的实验特性(需 #![feature(...)] 开启)。

💡 提示:stable 的承诺是「今天能编译的代码,明天依然能编译」;即便必须调整,也先经过一个版本的告警期逐步过渡。

Edition(版次):发布版本是连续小步迭代,Edition 则是每隔约 3 年一次的「语言层大版本」,用于引入少量不向后兼容的语法清理(如模块路径、闭包捕获语义)。已发布四个 Edition:

Edition锁定 rustc 版本发布时间代表性变化
20151.02015-05首个稳定版,奠定语言基线
20181.312018-12模块路径改革、dyn Trait、非词法生命周期(NLL)
20211.562021-10数组按值迭代、闭包独立捕获、From<&T>
20241.852025-02unsafe 前置声明、gen 关键字、尾部表达式临时生命周期调整

🔄 对比:可以把 Edition 理解成「可选的语法新包」。它不淘汰旧代码–2015 edition 写的 crate 至今能在最新编译器上编译。切换 Edition 是显式 opt-in:在 Cargo.tomledition = "2021" 即可;不同 Edition 的 crate 还能互相依赖、混合编译。

⚠️ 注意:升级 Edition 不等于「重学一门语言」。绝大多数代码在新 Edition 下无需改动;少数需迁移处,cargo fix --edition 会自动改写。本课程示例基于 edition 2021(当前最主流的稳定版次);若工具链已默认 2024,差异会在对应章节单独标注。

一句话区分:stable/beta/nightly 是工具链通道,2015/2018/2021/2024 是语言 Edition,两者正交。

课程学习路线

16 篇正文按递进难度分为四个阶段。建议按顺序学习,但每个阶段内部可以略读后回头精读。

阶段章节目标
一、入门基础1–3写出第一个能跑的 Rust 程序,掌握语法骨架与 I/O
二、核心机制4–8攻克所有权、生命周期与类型系统——Rust 的灵魂
三、工程能力9–11用集合、错误处理与模块组织写出真实可维护的代码
四、进阶与实战12–16智能指针、并发异步、Unsafe、工具链与最佳实践

💡 提示:若已有 C/C++ 或 Go 背景,可快速浏览第 1–3 章直接进入第 4 章——所有权是 Rust 与其他系统语言的根本分水岭。若是编程新手,请务必在第 1–3 章多停留,把基础语法练熟再前进。

⚠️ 注意:第 4 章(所有权与生命周期)是整门课程最难的章节,也是 Rust 学习曲线的"第一道墙"。不要期望一次读懂——先建立直觉,后续章节会反复回溯加深。

各章速览

  • 第 1 章 基础语法(一):变量、常量、数据类型、字符串与类型转换–Rust 类型系统的地基。
  • 第 2 章 基础语法(二):运算符、Range 语法、面向表达式的语法哲学、控制流–Rust 的语法骨架。
  • 第 3 章 函数与输入输出:函数定义、参数与返回值、println!/stdin 与格式化输出。
  • 第 4 章 所有权、借用与生命周期move&&mut、生命周期标注–Rust 最核心也最难的一章。
  • 第 5 章 结构体:定义、方法与内存布局–用 struct 组合数据。
  • 第 6 章 枚举:代数数据类型、OptionResult–用 enum 表达互斥可能。
  • 第 7 章 模式匹配match、解构与绑定–用模式拆解数据。
  • 第 8 章 类型系统:泛型、trait 与多态:泛型、trait bound、impl Traitdyn Trait、对象安全、型变等深度主题。
  • 第 9 章 集合与容器VecHashMapBTreeMapVecDeque 等标准容器的选型与性能对比。
  • 第 10 章 错误处理与 Panic 恢复Result/Option 链式处理、? 运算符、Panic 与可恢复错误的边界。
  • 第 11 章 模块、属性与宏:模块树、pub 可见性、条件编译、声明宏与过程宏入门。
  • 第 12 章 智能指针、迭代器与闭包Box/Rc/RefCell、迭代器适配器链、闭包捕获语义。
  • 第 13 章 并发与异步编程:线程、Mutex/ArcSend/Syncasync/await 与运行时模型。
  • 第 14 章 Unsafe Rust 与常用 trait 详解(进阶):unsafe 边界、Drop/Deref/From/AsRef 等高频 trait。
  • 第 15 章 工具链、Cargo 与外部 craterustupcargo 工作空间、依赖管理与生态常用 crate。
  • 第 16 章 最佳实践、性能与调试(进阶):惯用模式、性能优化技巧、常见陷阱与调试手段。

学习准备

在进入第 1 章前,建议先装好工具链:

1
2
3
4
5
6
7
8
9
10
11
# 1. 安装 rustup(官方一键安装器),它会一并装好 rustc 与 cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 2. 验证
rustc --version
cargo --version

# 3. 创建并运行第一个项目
cargo new hello_rust
cd hello_rust
cargo run

💡 提示rustup 管理多版本 Rust 工具链(stable/nightly/beta),cargo 是 Rust 的"瑞士军刀"——构建、测试、文档、依赖管理一站搞定。第 15 章会深入讲解工具链配置。

🔬 进阶:若需离线安装或在中国大陆加速下载,可设置镜像源:export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustupexport RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup。Cargo 依赖镜像可在 .cargo/config.toml 配置 replace-source