你的基础设施里某个地方有一个你不再碰的服务。它很快,从不崩溃,扛着旁边那个东西十倍的流量,没人记得它上次半夜告警是什么时候。问它是用什么写的,答案越来越多地是——在 Cloudflare、在 AWS、在微软、在 Linux 内核里——Rust。这个系列就是把你变成写那种服务的人:从第一个 cargo new,到借用检查器在你眼里不再像对手、更像你遇到过最较真的导师。
第一篇是地图,而我们对地图是认真的:Rust 到底是什么、它凭什么赢下了系统编程的上一个十年、这段旅程的代价是什么,以及前路的确切形状。
别人给不了的三角
每门语言都逼你在同一个三角里做选择:内存安全、性能、并发。带垃圾回收的语言给你安全和说得过去的并发,代价是停顿和运行时开销。C 和 C++ 给你性能和并发,代价是一整个类型的 CVE——微软和谷歌都报告过,他们大约 70% 的严重漏洞是内存安全 bug,而且这个数字他们报告了很多年。
Rust 的创始赌注是三个角可以同时成立,而机制不是运行时——是所有权模型:一套编译器在构建期执行的规则,规定谁拥有每个值、谁可以借用它。没有垃圾回收器,热路径里没有引用计数,没有会忘掉的 free()——只有一个拒绝构建“凌晨三点会崩溃的那个程序”的编译器。
一段话讲完整门语言:每个值有且只有一个所有者;你可以把它不可变地借出去任意多次,或者可变地借出去恰好一次,两者永不同时;当所有者离开,值就被清理——确定性地,在编译期可知的位置。数据竞争、释放后使用、重复释放、迭代器失效:这些不是 Rust 让“不太可能”的 bug,而是 Rust 不予编译的程序。这个系列的其余部分,只是这三句话展开成实践。
2026 年,Rust 到底跑在哪里
“值不值得学”这个问题几年前就自己回答了,但当下的版图值得平铺直叙地看一遍:
- 内核——Rust 是 Linux 的官方第二语言,真实的驱动已经合入;微软一直在用 Rust 重写 Windows 组件;Android 的新原生代码多年来 Rust 优先。
- 云与边缘——AWS 的 Firecracker(Lambda 底下的 microVM 层)、Cloudflare 的代理层,以及越来越多的 WebAssembly 负载。
- 你已经在用的开发工具——
uv和ruff改写了 Python 工具链的速度预期;Zed 编辑器;fish 4.0 的 Rust 重写版在 2025 年发布。最近哪个工具快得可疑,那它多半是 Rust 写的。 - 安全认证系统——Ferrocene 让 Rust 工具链通过了 ISO 26262 和 IEC 61508 认证,这意味着 Rust 进入了汽车和医疗设备——那些“快速行动”从来不是目标的地方。
- 2024 edition——2025 年初稳定,生活质量特性(let chains、async closures)全年陆续落地。语言已经走过破坏性变更的时代;edition 机制让你的 2021 代码照常编译,而新代码越来越好写。
诚实的部分:学习曲线
未来几周的某个时刻,你会写出一段在你脑子里完全正确的代码,然后看着编译器拒绝它。每个人都会——这体验普遍到有专门的名字:和借用检查器搏斗。这里有一个能把搏斗从几个月缩到几周的重新框定:借用检查器不是在指控你,它是在辅导你。 每一次拒绝都是其他语言会放你出厂的 bug——而编译器会解释,通常附带修改建议,用的是全行业最好的错误信息。
Rust 开出的条件不寻常,值得直说:前期付费(更严格的编译器、一些你从没见过的概念),永久回本(一旦编译通过,程序倾向于保持正确——没有 GC 停顿、没有数据竞争、生产环境没有段错误轮盘赌)。那些满意度调查不是炒作;那是人们在这笔交易里收钱的声音。
工具链——五分钟到第一次编译
Rust 的一个安静优势是工具链是已解决问题。rustup 安装一切并保持最新;cargo 一条命令兼任你的构建系统、测试运行器、包管理器、linter 前端和文档生成器:
# 安装 rustup(同时装好 cargo、rustc、clippy、rustfmt)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 新项目、构建、运行
cargo new hello-rust
cd hello-rust
cargo run
第一个程序和每门语言的一样,这正是重点——仪式后面才来:
fn main() {
let name = "world";
println!("Hello, {name}!");
}
再尝一口第 2 篇的内容,因为所有权规则从第一天就开始生效:
fn main() {
let s = String::from("hello");
let t = s; // 所有权在这里"移动"给 t——这不是拷贝
println!("{s}"); // error: borrow of moved value: `s`
}
这个错误就是整个系列的微缩版。在任何其他语言里,这段代码会编译通过,然后变成一颗地雷(或者一件你从不考虑的、被 GC 托管的非事件)。在 Rust 里它是一个附了一段解释的编译错误。两篇之后,你会读着它点头。
怎么读这个系列
十三篇,三幕,按依赖顺序:
- 第一幕 · 所有权即世界观(第 1–5 篇):所有权与借用、生命周期、类型系统与错误处理、字符串与迭代器。其他一切倚靠的五个概念。
- 第二幕 · 从会写到工程化(第 6–9 篇):Cargo 与项目结构、trait 与泛型、智能指针、并发与异步。“能编译的代码”和“能出厂的代码”的区别。
- 第三幕 · 精通(第 10–13 篇):unsafe 与 FFI、宏、性能工程、2026 生态地图——然后是“像 Rustacean 一样思考”的收官。
每篇结尾都有练习。要做——Rust 是一门肌肉记忆的语言,借用检查器是通过手教的,不是通过眼睛。
练习,以及第 2 篇
- 安装
rustup,创建hello-rust并运行。然后对你这个五行的项目跑cargo clippy和cargo fmt——趁还没有什么可 lint 的时候,把完整循环的肌肉记忆建立起来。 - 把上面那个移动值的例子粘进
main.rs,读完整的错误信息,包括所有备注。Rust 的错误是伪装成报错的文档;学会慢慢读它们,是第一幕里杠杆最高的技能。 - 不离开终端地探索:在空项目上跑
cargo doc --open,再跑rustup doc打开离线版的官方书。知道答案住在哪里,是学习任何语言的一半——而 Rust 恰好把答案随语言一起发行。
第 2 篇掀开那个错误的引擎盖:所有权、移动、读者与写者二选一规则,以及把借用检查器从对手变成导师的那些模式。