本章要回答的三个问题:Rust 凭什么既没有垃圾回收又能保证内存安全?装一套 Rust 环境到底要装什么?从写代码到跑起来,中间发生了什么?
系统编程长期被两难困住:要性能就得贴着内存 manually 管理,C/C++ 的悬垂指针、越界访问、双重释放由此而生;要安全就上垃圾回收,延迟与运行时开销又下不来。Rust 的答案是把内存错误的判决从运行时挪到编译时——借用检查器当法官,代码没跑起来先过堂。本章先把这套"法庭"的来龙去脉和基础设施交代清楚,后面九章都在这个框架里断案。
| 节 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 1.1 为什么是 Rust | 内存事故卷宗与 Rust 的判法 | 三类典型内存错误的成因对照 |
| 1.2 搭建审判环境 | 工具链由哪些部分组成 | rustup、cargo 常用命令清单 |
| 1.3 第一份判词 | 编译流程全貌 | Hello World 的解剖与编译阶段图 |
第 2 章进入基础语法取证:类型、变量、函数。那里会出现本套教程的第一批"案件"——类型不匹配与可变性违规的报错。
第 1 章的功能性结论不多,但每一条都会在后续章节反复被引用,值得整理成速查表带回用。
| 记忆点 | 内容 | 后续出庭位置 |
|---|---|---|
| 三类内存事故 | 释放后使用、双重释放、泄漏 | 第 3 章所有权立法的直接动因 |
| rustup 组件四件套 | rustc / cargo / rustfmt / clippy | 第 7 章工程化流水线 |
| edition 语义 | 判例集版本,非编译器版本 | 第 9 章宏的行为差异 |
| target 双档案 | debug 取证、release 定性能 | 所有性能相关章节 |
本章建议的动手清单按顺序执行,每步都有可验证的产出:装好工具链后 rustc --version 有输出;cargo new 建出标准目录;给 HelloWorld 加一条故意写错的类型标注,完整读一遍 E0308 报错;最后用 cargo build --release 对比两份产物的体积差。四步做完,说明审判环境已经可以受理真正的案件。
一个常见误区要提前驳回:在 debug 构建下做性能比对并得出结论。debug 默认不做优化且带大量断言,数组越界检查、整数溢出策略都会与 release 不同,凡涉及速度的判断一律以 release 为准。这条纪律贯穿全书,之后不再重复提醒。
本章结束时逐项打勾,全部通过再进第 2 章:rustc 与 cargo 版本可打印;cargo new 建出的项目能 cargo run 出结果;rustfmt 与 clippy 至少各跑过一次并看懂输出;亲手触发过至少一条 E 编号报错并完整读完。第五项常被跳过,但它恰恰是最重要的一项——本教程的方法论建立在"与编译器对话"之上,第一次对话越早发生越好。
备查关键词按出现顺序:内存安全三事故、rustup 工具链、rustc 流水线、Cargo 三件套(new/build/run)、E 编号报错格式、debug 与 release 双档案。每个词背后各有一节正文,索引这张表即可回庭。下一章起代码量陡增,本章建立的环境与读报错能力将每分钟都在使用——若跳过本章直入语法,绝大多数读者会在第一次 E0308 面前折返。