📚 Rust 课程系列

  1. 课程概览(本文)
  2. 基础语法
  3. 函数与输入输出
  4. 所有权、借用与生命周期
  5. 结构体、枚举与模式匹配
  6. 类型系统:泛型、trait 与多态
  7. 集合与容器
  8. 错误处理与 Panic 恢复
  9. 模块、属性与宏
  10. 智能指针、迭代器与闭包
  11. 并发与异步编程
  12. Unsafe Rust 与常用 trait 详解
  13. 工具链、Cargo 与外部 crate
  14. 最佳实践、性能与调试

这是一门面向已有编程基础的 Rust 系统编程课程,共 13 篇正文。本篇是系列入口,不涉及具体语法细节,而是回答三个问题:为什么学 RustRust 是什么本课程如何组织。读完这篇,你会清楚每一章在整体路线中的位置,以及该如何安排自己的学习节奏。

为什么选择 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第 3 章
零成本抽象迭代器、泛型、trait 编译后无运行时开销第 5、9 章
强类型 + 类型推断编译器挡住大量错误,同时不必处处手写类型第 1、5 章
没有空指针Option<T> 表达可能缺失的值,Result<T, E> 表达可能失败的操作第 7 章
现代工具链cargo 一站式管理构建、依赖、测试、文档与格式化第 12 章
无畏并发Send/Sync trait 让线程安全成为编译期属性第 10 章

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

理解下面这张心智模型图,能帮你定位后续每一章的坐标:

1
2
3
4
5
6
7
8
┌─────────────────────────────────────────────┐
│ Rust 的三层内核 │
├─────────────────────────────────────────────┤
│ 1. 所有权 / 借用 / 生命周期 (内存怎么活) │ → 第 3 章
│ 2. 类型系统 / trait / 泛型 (行为怎么复用) │ → 第 4、5 章
│ 3. 错误处理 / 并发模型 (失败与并行) │ → 第 7、10 章
└─────────────────────────────────────────────┘
↑ 由 cargo / 模块 / 宏 / 工具链支撑 ↑ → 第 8、12 章

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

Rust 的版本与 Edition

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

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

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

💡 提示:stable 的承诺是「今天能编译的代码,明天依然能编译」。Rust 团队极少做出破坏性改动;即便必须调整,也会先经过一个版本的告警期逐步过渡。这正是 Rust 适合长期维护的大型项目的原因之一。

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.toml 中写 edition = "2021" 即可;不同 Edition 的 crate 还能互相依赖、混合编译。

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

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

课程学习路线

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

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

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

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

各章速览

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

学习准备

在进入第 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 的"瑞士军刀"——构建、测试、文档、依赖管理一站搞定。后续第 12 章会深入讲解工具链配置。

🔬 进阶:如果你需要离线安装或在中国大陆加速下载,可设置镜像源: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