Rust 语言简介
在动手装环境之前,我们先认识一下 Rust 到底是什么、为什么值得学、能用它做什么。理解了背景,学习的时候会更有的放矢——尤其是后面会遇到"所有权"这种其他语言没有的概念,知道它要解决什么问题,理解起来会顺畅得多。
Rust 是什么?
Rust 是一门追求安全和性能兼得的系统级编程语言。它的核心承诺听起来矛盾:既要有 C/C++ 的极致性能,又要像 Java/Python 一样内存安全;既不要垃圾回收器(GC)的运行时开销,又不要程序员手动 free 内存。Rust 用一套独特的所有权(ownership)系统,在编译期实现了这一切。
诞生故事:一次电梯故障的启发
Rust 由 Mozilla 的工程师 Graydon Hoare 于 2006 年开始私下开发,2010 年正式公布,2015 年发布 1.0 稳定版。它的诞生故事很接地气:Hoare 有一次回家,发现公寓电梯因为软件 bug 卡住了,被迫爬 21 层楼。他开始反思——为什么现代软件这么多崩溃和漏洞?
分析后他发现,大量问题的根源是 C/C++ 的内存不安全:悬垂指针(用了已释放的内存)、缓冲区溢出(读写超出数组边界)、数据竞争(多线程同时改同一块数据)。这些问题在运行时才暴露,排查极难。他决心造一门"既像 C 一样快、又像 ML 一样安全"的语言。于是 Rust 诞生了。
名字 Rust 取自一种强健的真菌(rust fungus),寓意生命力顽强。它的吉祥物是一只螃蟹,叫 Ferris,你会在所有 Rust 社区看到它。
核心设计理念
- 零成本抽象:高级特性(泛型、迭代器、 Trait)不在运行时付出任何代价,所有抽象都在编译期展开。这是 Rust 的根本哲学——"你不用为没用到的功能付钱"。
- 编译期内存安全:通过所有权系统,在编译阶段就消灭悬垂指针、双重释放、空指针解引用。不需要 GC,也不需要手动 free。
- 无畏并发(Fearless Concurrency):借用检查器在编译期就阻止数据竞争,你可以放心地写多线程代码,不必担心"运行时偶发的诡异 bug"。
- 实用主义:Rust 不是学院派玩具,它有完整的包管理器 Cargo、友好的编译器报错、优秀的工具链(格式化、测试、文档生成一体化)。
第一个 Rust 程序
先看一眼代码。Rust 的 Hello World 长这样:
fn main() {
println!("Hello, World!");
println!("你好, Rust!");
}
// 输出:
// Hello, World!
// 你好, Rust!几个细节先留个印象,后面会逐一展开:fn 用来定义函数,main 是程序入口;println! 末尾的感叹号表示它是一个宏(macro),不是普通函数——宏在编译期展开;每行语句以分号结尾。装好环境后,用 cargo 创建项目就能跑起来,下一篇会详细讲。
Rust 的杀手锏:所有权
这是 Rust 最核心、也最与众不同的概念,这里先给个直观印象,后面有专门一篇深入讲。看下面这段代码:
// 所有权示例:Rust 不需要 GC 也能管理内存
fn main() {
let s1 = String::from("hello");
let s2 = s1; // 所有权转移给 s2
// println!("{}", s1); // 编译错误!s1 已失效
println!("{}", s2); // OK,输出 hello
}
// s2 离开作用域时,内存自动释放关键洞察:String 类型在堆上分配内存,变量 s1 是它的"所有者"。当执行把 s1 赋给 s2 时,所有权转移(move)给了 s2,s1 随即失效——再用 s1 就是编译错误。这避免了"两个变量同时释放同一块内存"的双重释放问题,完全在编译期完成,运行时零开销。整数、bool 等简单的栈类型则自动复制,不受此限制。
编译期就能挡住并发 bug
下面这段代码在其他语言里会编译通过、运行时偶发出错;在 Rust 里编译都过不了:
// 这段代码在编译期就会被拒绝,根本跑不起来
fn main() {
let mut v = vec![1, 2, 3];
let first = &v[0]; // 不可变借用
v.push(4); // 可变借用:编译错误!
println!("{}", first); // 编译器阻止了数据竞争
}
// 报错信息会精确告诉你:不能在存在不可变借用时
// 对数据进行可变操作。运行时永远不会出现这种 bug。这就是"无畏并发"的含义——借用检查器强制执行"同一时刻要么多个只读共享,要么一个独占可写"的规则,数据竞争从根源上无法发生。新手会觉得它"太严格",但习惯后你会发现它像一位严格但睿智的导师。
Rust 都用在哪?典型应用场景
- 操作系统:Linux 内核已正式接受 Rust 代码(2022 年起),Windows 部分组件用 Rust 重写,Google Android 系统的关键模块改用 Rust。
- 浏览器引擎:Firefox 的 CSS 引擎 Stylo(源自 Servo 项目)用 Rust 写成,性能大幅提升。
- 命令行工具:ripgrep(比 grep 快)、bat(比 cat 强)、fd(比 find 友好)、exa(替代 ls)等明星工具全是 Rust。
- WebAssembly:Rust 与 wasm 天然契合,是编译到 wasm 的首选语言,体积小性能强。
- 区块链:Solana、Polkadot、Diem 等公链的核心合约层用 Rust。
- Web 后端:Cloudflare、Discord、Dropbox 的关键服务用 Rust 重写后显著提升了稳定性。
- 嵌入式与游戏引擎:Bevy 游戏引擎、嵌入式开发,凡是需要"贴近硬件又怕 C 的内存 bug"的场景,Rust 都合适。
Rust vs 其他语言
- vs C/C++:Rust 性能相当,但内存安全和并发安全有编译期保障,工具链现代化(Cargo 远超 CMake)。代价是学习曲线陡。
- vs Go:Go 更简单、并发更顺手、编译更快;Rust 更安全(无 GC)、性能更强、控制更精细。Go 适合写后端服务,Rust 适合系统级和高性能场景。
- vs Java/Python:Rust 性能是它们的几十倍,无 GC 暂停,部署单文件。但开发效率不如这两门高级语言,生态也还在成长。
- vs Swift:两者理念相似(现代、安全),Swift 主要在苹果生态,Rust 在服务端和跨平台更强。
该不该学 Rust?
如果你的方向是系统编程、底层开发、高性能服务、WebAssembly、嵌入式、区块链,Rust 几乎是必修课。即便你日常用 Python/JS,Rust 也是绝佳的"第二语言"——它教你用新的方式思考内存、并发和错误处理,学完后写其他语言的代码也会更严谨。
值得一提的是,Rust 是唯一在 Stack Overflow 开发者调查中连续 8 年(2016-2023)蝉联"最受喜爱语言"的编程语言。开发者爱它,不是没有理由的。
← 返回 Rust 教程目录
下一篇 Rust 环境安装与 Cargo →