附录 A: Rust 术语表
Rust 的设计围绕内存安全与并发安全展开,其核心概念形成了一套独特的术语体系。本附录对常见术语进行简明解释,帮助读者快速理解文档、社区讨论和编译器提示。
所有权(Ownership)
所有权是 Rust 内存管理的核心机制。每个值在任意时刻有且仅有一个所有者(owner),当所有者离开作用域时,该值被自动释放。所有权规则确保了内存安全,无需垃圾回收。
例如:
let s = String::from("hello");
let t = s; // s 的所有权转移给 t,s 不再有效
// println!("{}", s); // 编译错误:s 已 moved
借用(Borrowing)
借用允许在不获取所有权的情况下访问值。通过引用(&T 表示不可变引用,&mut T 表示可变引用)实现。Rust 的借用检查器在编译期强制以下规则:
- 任意时刻,要么有多个不可变引用,要么有一个可变引用;
- 引用必须总是有效的(不能悬空)。
生命周期(Lifetime)
生命周期是引用的有效范围,用于防止悬空引用。通常由编译器自动推断,但在函数返回引用或结构体包含引用时需显式标注,如 &'a str。生命周期参数(如 'a)描述多个引用之间的存活关系。
Trait
Trait 定义了类型的行为契约,类似于其他语言中的接口。它支持:
- 抽象方法(可带默认实现);
- 泛型约束(如
fn print<T: Display>(x: T)); - 动态分发(通过
Box<dyn Trait>或&dyn Trait)。
标准库中的 Debug、Clone、Iterator 等均为 trait。
Crate
Crate 是 Rust 的编译单元和包单位。一个 crate 可以是:
- 二进制 crate(binary crate):生成可执行程序,包含
main函数; - 库 crate(library crate):提供可复用代码,供其他 crate 依赖。
每个项目至少包含一个 crate,可通过 Cargo.toml 声明依赖其他 crate。
模块(Module)
模块是 Rust 的命名空间和可见性控制机制。使用 mod 关键字定义,通过 pub 控制公开性。模块可嵌套,形成层次化代码组织。路径使用 :: 分隔,如 std::collections::HashMap。
Cargo
Cargo 是 Rust 的官方构建工具与包管理器。负责项目创建、依赖解析、编译、测试、文档生成等。常用命令见附录 B。
泛型(Generics)
泛型允许编写适用于多种类型的代码,如 Vec<T>、Option<T>。Rust 在编译时对泛型进行单态化(monomorphization),为每种具体类型生成专用代码,零运行时开销。
Match 与模式匹配(Pattern Matching)
match 表达式对值进行穷尽式模式匹配,确保所有可能情况都被处理。模式可解构枚举、元组、结构体等,是 Rust 控制流的核心方式。
match result {
Ok(value) => println!("Got {}", value),
Err(e) => eprintln!("Error: {}", e),
}
Result 与 Option
Option<T>表示可能存在或不存在的值(Some(T)或None);Result<T, E>表示可能成功(Ok(T))或失败(Err(E))的操作。
两者均鼓励显式处理缺失或错误情况,避免空指针或未检查异常。
Send 与 Sync
这两个 marker trait 描述类型在线程间的共享能力:
Send:值可安全地跨线程转移所有权;Sync:值的引用可安全地在多个线程间共享(即&T是Send)。
几乎所有类型都自动实现 Send 和 Sync,除非包含 Rc、裸指针等非线程安全组件。
小结
掌握这些术语是深入理解 Rust 编程模型的基础。它们不仅出现在编译器错误信息中,也构成了 Rust 社区交流的通用语言。建议在实践中结合《The Rust Programming Language》(“The Book”)反复对照,逐步内化这些概念。