课程 · 系列目录

Rust 从零开始

面向第一次学习 Rust 的中文教材。18 章基础讲解与配套代码,新增内存布局、堆缓冲区和资源释放实验;后续结合 Web Server 深入编译、操作系统、网络与并发。

Hex4C59 7 分钟阅读 更新于 2026-10-15

导读 + 18 章 · 3 篇配套资料开始阅读 →

开始阅读:学习指南 · 下载配套源码

已发布章节 #

从语法走向系统机制 #

写对语法之后,还需要解释值在哪里、指令怎样生成、操作由谁执行,以及等待发生在哪一层。每个专题都按“先预测、再观察、最后核对保证范围”来练习;输出符合预期之外,还要说明换一个目标平台或实现条件后,哪些结论仍然成立。

现在可以读底层入门 01:值、地址、内存布局与资源释放。三个实验已经提供源码和本次实测结果。其余主题按下面的路线继续补充,尚未发布的部分不计作现有教材内容。

主题要解释的机制准备观察的实验与安排
值、布局与资源大小、对齐、填充;字符串值与堆缓冲区;移动、克隆和析构内存入门专题已发布;后续继续研究容器扩容和分配成本
编译与链接源码经过哪些表示,库与可执行文件如何组合规划:对照编译产物、LLVM IR 与汇编,区分语言规则和某次优化结果
抽象怎样落实泛型实例化、动态分发和闭包环境如何表示规划:对照泛型与 dyn Trait 的调用代码,跟踪捕获的值和分配
操作系统与 I/O进程地址空间、文件句柄、用户态与内核态、缓冲与系统调用规划:从文件读写到 TCP 连接,分别记录 Rust 调用和系统观察
TCP 与 HTTP字节流、分批读取、消息边界、超时和半途断开Web Server 19~22:让客户端拆分发送请求,检查解析器何时知道请求完整
线程与共享内存线程栈、调度、同步、锁与可见性;后续再研究原子操作和内存序Web Server 23~24:记录任务排队和执行,检查共享状态与锁的范围
资源与负载边界有界队列、等待期限、背压和关闭顺序Web Server 24~25:用慢连接、队列满和关闭实验检查资源是否可控
异步执行future 的状态、poll、唤醒与 I/O 就绪通知规划为项目后扩展:对照阻塞版本,追踪任务为何暂停、由谁恢复

学习时把证据分开:规范说明必须成立的规则,实验记录某个版本与环境的表现,性能结论还要有对应的测量方法。看到地址相同、类型大小固定或运行更快,都需要继续解释这次观察能够支持多大的结论。

后续综合项目:Web Server #

前十八章打好语法、文件操作和 HTTP 客户端的基础,接下来的综合项目是从空 Cargo 项目实现一个 Web Server(Web 服务器):接收浏览器或客户端的 HTTP 请求,再返回网页、文件或 JSON。命令行待办工具作为前置练习,后续项目围绕服务器展开。

目标程序暂定名为 rust-webserver,默认只监听本机地址 127.0.0.1。完成后应能访问首页 /、健康检查 /health、课程数据 /lesson.json 和静态资源 /static/;第十八章的客户端可以请求其中的课程数据,检查服务器是否返回了正确的响应。

下面是后续章节的写作安排,正文和项目源码尚未发布。先用标准库讲清连接、协议和并发,并把每一步连接到内存、操作系统和网络机制;异步 Rust、Tokio 与 Web 框架作为完成这个项目后的扩展。

拟定章节项目推进Rust 规则需要解释与观察的系统机制
19:接收第一个 TCP 连接监听、接收和读写连接Read、Write、连接所有权句柄与系统调用;线程在哪一步等待,数据进入哪块缓冲区
20:解析请求,构造响应请求与响应类型、完整请求头字节与字符串、借用、ResultTCP 字节流与 HTTP 消息边界;分批读取和缓冲区复用
21:路由与 JSON 接口首页、健康检查和课程数据枚举、match、函数与闭包处理器的调用与数据分配;泛型、函数指针和动态分发的区别
22:提供静态文件读取文档目录,处理错误路径Path、PathBuf、I/O 错误路径如何变成打开的文件;文件缓冲与响应中的字节长度
23:让多个连接同时工作单线程过渡到多线程move、Send、'static线程栈与共享地址空间;等待、调度和实际的并行执行
24:实现固定线程池固定工作线程和有界队列channel、Arc、Mutex、FnOnce trait object排队、锁竞争、背压与负载上限;锁是否覆盖了阻塞或业务执行
25:关闭服务并完成验收配置、限额、超时与关闭Drop、Option::take、JoinHandle停止接收、结束任务、关闭连接和回收线程的顺序;记录资源与延迟

首版按教学用的 HTTP/1.1 子集实现:支持 GET 和 HEAD,每条连接只处理一个请求,响应声明 Connection: close。请求头必须有大小和时间限制,静态文件只能来自配置的文档目录。请求体、长连接、TLS 和公网部署留在扩展范围中;具体拒绝规则会随协议章节和测试一起写清。

项目验收包含以下行为:

  • 浏览器能打开首页;客户端能解析课程 JSON;HEAD 返回与对应 GET 一致的响应元信息,但不发送响应体。
  • 不存在的资源、非法请求、不支持的方法和目录越界都有明确处理;对应行为有自动测试。
  • 工作线程数量和等待队列有上限,慢连接不会无限占用资源;测试覆盖队列满、超时和客户端中途断开的情况。
  • 关闭过程能停止接收新连接,处理或明确取消已接收的任务并回收工作线程。能够解释连接、任务和共享状态的所有权,以及释放它们的先后顺序。

每章会配最小语法例子、预期编译失败的对照、系统机制实验和独立练习。项目验收还要追踪数据复制、系统 I/O、等待位置和资源释放;涉及吞吐、延迟或内存开销时记录实际测量条件。

参考资料:《Rust 程序设计语言》的多线程 Web Server 项目、标准库 TcpListener 文档。资料核对日期:2026-10-15。

语法规则阅读路线 #

第二、三、四、六到十章增加了语法细读。每一节用最小程序拆开规则,再用故意失败的反例说明边界。按章节顺序读;已经做完项目的读者,可以用下表回查具体写法。

位置讨论的语法阅读时要回答的问题
第二章绑定、类型推断、数字后缀与转换推断受哪些位置约束;为什么窄化可能改变数值
第三章块、分号、单元值与控制流类型一段代码产生什么值;哪个分支会结束函数
第四章mut、引用、解引用与再借用正在修改绑定还是所指的数据;权限是否仍被借用
第六章模式、守卫、ref、通配符与 let … else模式建立了什么名字;内部字段会移动还是借用
第七章Result 与 Option 上的问号成功留下什么值;失败返回到哪一层
第八章路径、可见性、宏与属性名字从哪里解析;访问和编译条件是否允许
第九章泛型参数、impl Trait 与生命周期关系哪些位置必须相同;签名增加了哪些约束
第十章闭包捕获与调用能力捕获怎样发生;调用是否读取、修改或交出数据

源码下载包的 syntax/ 保存 22 个正常程序,compile-fail/syntax*.rs 保存 20 个预期失败的程序。它们逐个运行,不并入正常 Cargo 构建。不要只记录“能编译”:还要写出值的类型、名字的作用域和失败发生在哪条规则上。

练习与底层专题 #

底层专题与附录供分支学习、练习和查阅,不计入已发布十八章的顺序。第四、九章另有所有权和生命周期图解。

源码与运行方式 #

解压下载包,进入 rust-course 目录。安装好 Rust 工具链后运行:

cargo run -p rust-basics --example ch01_hello
cargo run -p taskbook -- add "学习 Rust"
cargo run -p taskbook -- list
cargo test --workspace

第 1~12 章使用基础工作区;第 13~15 章在 practice 工作区运行;第 16~18 章在 projects 工作区运行。JSON 项目使用 Serde,后续命令行和 HTTP 项目分别使用 clap 与 reqwest。更多命令、目录说明和验证范围见下载包中的 README.md。

cd practice
cargo fetch --locked
cargo run -p taskbook-plus -- pending
cargo run -p error-lab -- 30
cargo run -p taskbook-json --example serde_basics

第 16~18 章的命令从 rust-course/projects 运行,首次获取依赖需要网络。HTTP 示例只连接同机启动的练习服务:

cd ../projects
cargo fetch --locked
cargo run -p taskbook-cli -- --help
cargo run -p lesson-http --example serve

服务打印端口后,在另一个进入 projects 的终端运行客户端。完整步骤、预期输出和失败条件见第十八章。

一起讨论

选中正文中的文字,可以针对这段内容发起讨论。

正在读取讨论…

在 GitHub 查看与管理讨论 ↗

文章讨论