讲解
Rust 是一门系统级编程语言,由 Mozilla 研究院孵化,2015 年发布 1.0。它瞄准的是一个存在了几十年的矛盾:C 和 C++ 给了程序员完全的控制权,却也带来了段错误、悬垂指针、数据竞争等一整类内存事故;而带垃圾回收的语言用运行时开销换来了安全。Rust 的贡献是证明这两者可以兼得——靠编译期的所有权(ownership)与借用检查(borrow checker),不写垃圾回收器也能在编译阶段挡住绝大多数内存错误。
这种设计带来了三个现实好处。一是性能:没有 GC 暂停、没有运行时装箱,Rust 的性能与 C/C++ 处于同一梯队。二是可靠:「编译通过基本就能跑对」是 Rust 程序员的真实体验,编译器的严格在前期付费,在后期连本带利收回来。三是表达力:模式匹配、Trait、迭代器、闭包这些现代语言特性一样不少,写高层业务代码并不笨拙。
Rust 的应用面已经很广:命令行工具(ripgrep、fd)、操作系统组件(Linux 内核、Windows 部分模块)、浏览器引擎、区块链节点、WebAssembly、云基础设施(Cloudflare 的大量边缘服务)。在 Stack Overflow 年度开发者调查中,Rust 连续多年被评为「最受喜爱」的语言。
学习曲线需要坦白说明:所有权和借用检查是全新的思维方式,前几周和编译器「吵架」是每个 Rust 学习者的必经之路。本教程的策略是循序渐进:前八章打基础语法,九到十一章集中攻克所有权这个核心难点,之后再展开工程化特性。每一章的示例代码都用本机 rustc 实际编译并运行过,建议你也亲手敲一遍,并且故意改错看编译器说什么——Rust 的报错信息是出了名的好读。
示例
先用最经典的方式打个招呼。下面这个程序在本教程的构建流程中被真实编译并执行过:
fn main() {
let lang = "Rust";
println!("你好,{lang}!");
assert_eq!(2 + 2, 4);
}
逐行看:fn main() 是程序入口;let 声明变量(默认不可变,第四章细讲);println! 末尾的感叹号说明它是宏而不是函数,{lang} 是格式化占位符,直接引用同名变量;assert_eq! 断言两边相等,不相等程序就会 panic。一个能编译、能运行、还带自检的小程序——这就是 Rust 的日常。
常见坑
- 被前两章的难度吓退:和借用检查器较劲是正常现象,不是你笨。坚持过所有权三章,后面会突然顺起来。
- 带着别的语言的习惯硬写:在 Rust 里复刻 Java 的继承体系或 JS 的随便改共享对象,会处处碰壁;先接受 Rust 的玩法,再谈迁移旧经验。
- 一上来就写 unsafe:unsafe 是给库作者和 FFI 场景的高级工具,入门阶段完全不需要,教程里也不会出现。
- 混淆 Rust 版本和 edition:编译器版本(如 1.91)持续滚动更新,edition(2015/2018/2021/2024)是语法代际。本教程示例按 edition 2021 验证,这也是目前最常见的选择。
小结
Rust = 无 GC 的内存安全 + C 级性能 + 现代语言表达力,代价是要学会和借用检查器相处。本教程共 25 章,所有示例都经过真实编译运行。下一章先把工具链装起来。