导读
学习指南
Rust 学习路线:从语法、所有权到内存实验,再用 Web Server 连接编译、操作系统、网络与并发;区分已发布内容和后续专题。
Hex4C59 9 分钟阅读 更新于 2026-10-17
编程·原创·实战教程
如果你还不会 Rust,可以从这套教材的第一章开始。你不需要事先掌握 C、C++ 或其他编程语言;需要会创建文件、安装软件,并愿意在终端里运行命令。第一章会解释这些命令在做什么。
前十八章的目标是能独立创建 Rust 项目,处理文本和列表,把代码拆成函数和模块,读懂常见编译错误,并用命令行工具和 HTTP 客户端练习这些知识。后续综合项目将完成一个 Web Server,从接收连接开始,逐步加入路由、静态文件、线程池和服务关闭。异步编程、Web 框架、unsafe 和嵌入式开发另作扩展。
先看最后会做出什么 #
后续要完成的 Web Server(Web 服务器)能接收浏览器的请求,返回网页、静态文件和 JSON;它还要处理同时到来的连接,并在关闭时回收工作线程。具体阶段与验收要求见Web Server 项目路线。这部分目前处于规划阶段,现有下载包提供前十八章的代码。
先用较小的程序练习前置知识。第十一、十二章会实现 taskbook,一个在终端使用的待办工具。命令行界面(Command Line Interface,CLI)指用文字命令操作程序的方式。
cargo run -p taskbook -- add "学习 Rust"
cargo run -p taskbook -- add "写练习"
cargo run -p taskbook -- done 1
cargo run -p taskbook -- list最后一条命令输出:
1 [x] 学习 Rust
2 [ ] 写练习你结束程序、重新运行,它还能读回任务。做出这个工具需要处理用户输入、组织数据、报告错误和读写文件,也需要给这些行为写测试。前十章会逐步准备这些知识。
下载源码,建立练习目录 #
下载 Rust 从零开始配套源码,解压后会得到一个 rust-course 目录。基础工作区有两个 Cargo 包;后续练习另放在 practice 和 projects 工作区:
rust-course/
├── Cargo.toml 多个包共用的工作区配置
├── README.md 源码使用说明
├── basics/
│ ├── examples/ 第 1~10 章示例和练习答案
│ ├── src/ 第 8 章模块示例
│ └── tests/ 第 8 章集成测试
├── systems/ 底层专题的三个独立 Rust 程序
├── compile-fail/ 专门用来观察编译错误的代码
├── taskbook/
│ ├── src/ 第 11~12 章项目
│ ├── examples/ 第 11 章内存版本
│ └── tests/ 命令行集成测试
├── practice/
│ ├── taskbook-plus/ 第 13 章功能扩展
│ ├── error-lab/ 第 14 章错误类型
│ └── taskbook-json/ 第 15 章 JSON 存储
└── projects/
├── taskbook-backup/ 第 16 章备份与恢复
├── taskbook-cli/ 第 17 章 clap 命令行
└── lesson-http/ 第 18 章本机 HTTP 请求先按第一章安装工具。之后在终端进入解压出的目录,例如:
cd rust-course
cargo run -p rust-basics --example ch01_hellocd 改变终端当前所在的目录。上面的命令假设终端已经位于 rust-course 的上一级;如果不在,请先进入你的下载目录。不要把文件夹路径原样照抄成别人的路径。
教材中所有带 -p rust-basics 或 -p taskbook 的命令,都在这个 rust-course 目录运行。-p 选择要运行的包,--example 选择示例。这两个基础包只有 Rust 标准库依赖;安装好工具链后,可以给 Cargo 命令加上 --offline,避免访问依赖仓库。
怎样读一章 #
先把整段示例运行起来,确认输出。随后读解释和语法细读,写出关键表达式产生哪种类型的值、变量名在哪段代码中可用。学到第四章后,还要指出哪一步交出了数据的所有权,哪一步只是让函数暂时读取或修改数据。再给变量换一个值、修改一种写法,预测运行结果或编译错误,最后关掉示例独立做练习。
参考答案放在可展开区域。遇到困难时先看编译器指出的行和错误原因,再对照本章讲过的规则。仅仅把答案运行成功,不能说明你已经能从空文件写出来。
本教材使用两种代码说明:“完整代码”可以按指定命令运行;“局部片段”用来解释某个表达式,需要放到上下文中。明确写着“故意无法编译”的例子用于观察错误,不要用它覆盖正常示例后期待编译成功。
第 13~15 章放在 rust-course/practice。它包含功能扩展、错误类型和 JSON 存储三个包,不属于前面的基础工作区。先在这个目录运行 cargo fetch --locked 获取练习依赖,再运行带 -p taskbook-plus、-p error-lab 或 -p taskbook-json 的命令。第十五章使用 Serde 和 serde_json,首次获取依赖需要网络;下载包的锁文件固定了本轮使用的版本。
第 16~18 章在 rust-course/projects 运行,包含 taskbook-backup、taskbook-cli 和 lesson-http。同样先运行 cargo fetch --locked。它们分别练习备份与恢复、clap 参数解析,以及只访问本机服务的 HTTP 请求;不要在外层工作区寻找这些包。
怎样检查自己读懂了语法 #
语法规则阅读路线整理了八个章节的语法细读。它们直接放在原章中,既解释常见写法,也讨论看起来相近却不能互换的写法。初次阅读按章节推进,回顾时按符号或问题查表。
这些检查随章节逐步学习,不要求你开始时就能回答。例如看到 let mut slot: &mut i32,应分别解释两个 mut 约束什么;看到 Some(wanted),应判断它在模式位置绑定了新名字,还是在表达式位置构造值;看到 ?,应指出它所在函数或闭包的返回类型,说明失败时会把什么交回调用方。仅能复述程序输出,还没有完成这些检查。
每次只改一个地方,例如增加分号、去掉引用、把一个模式名字换成 _。先写下预计的类型或错误原因,再运行核对。编译器接受程序,只证明它满足相应的类型和借用等编译规则;输入输出是否符合需求仍需项目练习验证。
怎样学到底层机制 #
掌握一种写法后,再往下追踪它管理的数据和执行过程。比如移动一个 String,要区分字符串值本身与另行分配、用来存放文本的内存区域(堆缓冲区),检查哪部分被复制、谁接管释放责任;读一次网络连接,还要追问读到了多少字节、能否判断消息已经完整,以及当前线程是否在等待。
先读内存入门专题,运行大小、对齐、移动与析构实验,再看系统机制路线。编译与链接、泛型和动态分发、进程与 I/O、线程同步及异步执行将逐步补充,并与 Web Server 项目衔接。
每次实验记录源码、编译器、目标平台、构建模式和观察结果。说明哪些结论有语言或库文档保证,哪些只来自这次运行。当前已提供内存专题的三个正常程序和一个预期失败的程序,下载包中的目录是 systems/ 与 compile-fail/;其余底层专题仍在规划中。
阶段练习与排错 #
分级练习与项目验收安排在第六、十二、十八章之后。每个阶段依次练习修改现有程序、补全行为和独立实现,参考答案放在折叠区域。它们是正式章节之外的附录,不改变前十八章的阅读顺序。
第四章增加了移动与借用图解,第九章增加了引用有效范围图解。遇到工具、工作区、编译或运行错误,可以查集中排错指南,再回到对应章节。
学习路线与验收 #
| 阶段 | 章节 | 通过标准 |
|---|---|---|
| 写出基础程序 | 1~3 | 不看答案写出一个计算总时长、判断是否达标的程序 |
| 理解数据的使用 | 4~6 | 能解释移动和借用的区别,定义并修改一个任务列表 |
| 处理错误和组织代码 | 7~10 | 对无效输入返回错误,把逻辑拆成模块并写测试 |
| 完成命令行练习 | 11~12 | 新增、完成、列出任务;重启可读回;出错时给出明确提示 |
| 完善命令行练习 | 13~15 | 增加查询和删除,区分错误种类,把旧任务迁移到 JSON 新文件 |
| 文件、命令行与网络 | 16~18 | 恢复到新文件,用 clap 检查参数,区分 HTTP、JSON 与业务失败 |
| 内存机制入门 | 配套专题,已发布 | 解释值与缓冲区、大小与对齐、移动与克隆、借用结束与析构的区别 |
| 后续综合项目(规划中) | 拟定 19~25 | 独立实现 Web Server,解释连接与任务的所有权,并用测试检查路由、静态文件、并发和关闭行为 |
第四章通常值得多做几遍。你可以在一章上停留几次练习,不必为了赶进度记住所有语法。第九章的生命周期先要求能读懂基本签名、解释引用来自哪里;复杂的泛型接口不在这次入门的验收范围内。
编译器报错时怎样继续 #
运行 cargo check,先处理第一条实际的 error。找到它指向的文件和行号,再读下面的说明。一个错误可能让后续代码产生更多报错,修好它后重新检查。
如果有 E0382 这样的编号,可以运行:
rustc --explain E0382它会解释对应错误类型。warning 是警告,通常不阻止编译,但也值得处理。让人看懂的代码与能通过编译的代码都需要练习。
版本与验证范围 #
配套项目采用 Rust 2024 edition,清单声明的最低工具链版本是 Rust 1.85。edition 是一组语言兼容规则,和每次发布的编译器版本不是同一个概念。
本次在 2026-10-12 使用 macOS arm64 的 rustc 1.99.0、cargo 1.99.0 验证了示例、参考答案、故意编译失败的案例和最终项目。还运行了格式检查、Clippy、单元测试、集成测试、文档测试及 release 构建。最低版本 1.85 和其他操作系统没有在本次实际运行;声明的最低版本不能替代这些环境的实测结果。
2026-10-13 进一步展开了第 1~3 节,直接从正文运行 32 个完整程序,确认 2 个故意失败的例子,并同步更新第三节配套源码。
2026-10-13 继续展开第 4~6 章,直接从正文运行 47 个正常程序并核对预期输出,确认 8 个故意编译失败的例子和 1 个故意触发 panic 的例子;另检查 13 种输入或代码变体,覆盖空文本、空列表、UTF-8 边界和枚举遗漏分支。第六章的完整示例和书籍练习也在配套源码中加入了空列表处理。
2026-10-13 展开第 7~12 章后,直接从正文运行了 35 个正常程序,确认 7 个故意编译失败的例子,并检查 21 种输入或代码变体。第八章的库项目,以及第十一章到第十二章的待办工具,都按正文从新建 Cargo 项目重建,检查模块可见性、测试失败与恢复、错误传播、跨进程保存和无效输入不覆盖原文件。
2026-10-13 新增第 13~15 章,在 macOS arm64、rustc 1.99.0、cargo 1.99.0 上运行了练习工作区的 20 项测试和基础工作区的 15 项测试,并通过格式检查、Clippy 与练习工作区 release 构建。另按正文重建三个项目,核对 4 个示例的输出、命令行演示、2 个预期编译错误和 2 道修改练习。基础工作区还在空 Cargo 缓存下离线运行;最低 Rust 1.85 和其他系统仍未实测。
2026-10-13 新增第 16~18 章,在 macOS arm64、rustc 1.99.0、cargo 1.99.0 上运行 projects 工作区的 14 项测试,并通过格式检查、Clippy 和 release 构建。另从正文重建 12 个完整文件,运行备份与恢复、命令行演示、1 个独立答案和本机 HTTP 的 5 种响应模式;第十七章统计命令与第十八章字段别名的修改练习也通过了实际测试。最低 Rust 1.85、Windows 和 Linux 仍未实测。
2026-10-13 补充分级练习和排错附录,从正文提取并运行内存书单、文件时长记录器和批量本机客户端。两个基础示例新增的 6 项单元测试通过;另检查跨进程保存、无效参数和损坏文件不被覆盖,确认 3 个预期编译错误及其修正版。批量客户端检查了 4 种响应组合和 3 种参数错误,服务响应改为 45 分钟和 0 分钟的练习也已实际运行。基础与 projects 工作区通过格式检查、Clippy 和全目标测试;验证环境仍为 macOS arm64、rustc 1.99.0、cargo 1.99.0,最低工具链和其他系统未在本轮实测。
2026-10-13 加深第二、三、四、六到十章的语法讨论,从新增正文提取并运行 22 个正常程序,确认 20 个预期编译失败的反例,并检查 13 种修改后的写法。正常程序通过 rustc -D warnings 编译和输出检查,全部新增源码通过 rustfmt 检查。验证环境为 macOS arm64、rustc 1.99.0;Rust 2024 edition 的引用模式限制按本次实际诊断说明,最低 Rust 1.85 和其他系统未在本轮实测。
如果你的版本不同,错误消息的措辞可能不同。判断示例是否成功,主要看程序输出和测试结果。源码的 README.md 列出了复查命令。
官方延伸阅读 #
外部文档查阅日期:2026-10-12。
一起讨论
选中正文中的文字,可以针对这段内容发起讨论。
正在读取讨论…
在 GitHub 查看与管理讨论 ↗