Skip to content

附录 A · 术语中英对照

本附录是全篇译法基准:任何章节出现的术语,都必须与本表一致。 若某章想采用不同译名,先改本表,再改所有引用它的章节,不允许两套译法并存。 报错相关术语见附录 B · 编译器报错速查

使用说明

本附录不是「词汇表装饰」,而是约束文件。它的作用有三条:

  1. 可检索:读者看到 monomorphization 不懂,能在本表查到「单态化」,再用同一关键词在本站内搜索。
  2. 可预测borrow 永远是「借用」,elision 永远是「省略」,读者第二次见到不必重新猜。
  3. 可对照:读者已有 Python / Java / C++ / Go 经验,本表的「一句话说明」直接写清这个概念** 在哪门语言里对应什么**,省去来回查英文文档。

阅读约定:

  • 表格里的「首次出现章节」是该术语第一次被正式定义的位置,不是唯一出现的位置。
  • 英文列一律用反引号包裹(ownership),保证等宽字体下形近字母(l/1O/0)可辨。
  • 代码标识符(Vec<T>unwrap_or_elsedyn不翻译、不加空格,直接照抄。
  • 译名栏里带「(不译)」的条目,正文中必须保留英文原词,禁止自造中文名。

A.1 主表:术语中英对照

英文中文译名一句话说明首次出现章节
ownership所有权「谁持有值、谁负责释放」的编译期规则,替代 GC 与手动 free所有权
borrowing借用以引用临时访问别人的值,不取得所有权;用 &/&mut 表达所有权
move semantics移动语义赋值/传参把所有权交给新位置,原变量随之失效,防止双重释放所有权
copy semantics复制语义赋值/传参按位复制出独立的值,原变量仍可用(Copy 类型)所有权
clone克隆显式调用 .clone() 做一次可能昂贵的深拷贝,与移动到新位置无关所有权
lifetime生命周期编译期的「引用有效期」标注,描述引用之间的关系而非运行期时长所有权
elision省略(生命周期省略)编译器按固定三条规则补出未写的生命周期,'_ 表示此处省略泛型与生命周期
variance型变泛型参数上的生命周期/类型能否子类型化的方向性规则泛型与生命周期
covariance协变&'long T 可用在需要 &'short T 的地方(生命周期可缩短)泛型与生命周期
contravariance逆变方向与协变相反,主要出现在函数参数位置:fn(&'short T) 可用于 fn(&'long T)泛型与生命周期
invariance不变(不变型)既不能放宽也不能收紧,&mut TCell<T>UnsafeCell<T> 都是不变泛型与生命周期
drop析构(不译 drop值离开作用域时自动调用的清理钩子,Drop::drop 只应由编译器调用所有权
RAIIRAII(不译)资源获取即初始化:把释放逻辑绑在值的生存期上,Rust 用 Drop 实现所有权
stack编译期已知大小的后进先出区域,分配只是移动栈指针所有权
heap运行期按需申请的内存区域,靠指针访问,需要所有者负责归还所有权
pointer指针一个内存地址值;Rust 里分引用(有借用检查)与裸指针(无检查)两类所有权
reference引用借来的地址,&T 只读、&mut T 独占可写,受借用检查器约束所有权
dereference解引用*(或自动解引用)从引用拿到被引用的值所有权
smart pointer智能指针带所有权语义与 Deref/Drop 行为的指针类型,如 Box/Rc/Arc智能指针与闭包
interior mutability内部可变性通过 &T 也能修改内部状态,把借用检查从编译期挪到运行期智能指针与闭包
traittrait(不译)一份能力契约,类似 Java 接口但可带默认实现、可给外部类型实现结构体与 trait
trait objecttrait 对象dyn Trait 形式,运行期决定调用哪个实现,是数据指针 + 虚表的胖指针结构体与 trait
blanket impl泛型实现 / 全覆盖实现impl<T: Bound> Trait for T 一类实现,给满足约束的所有类型统一加能力泛型与生命周期
orphan rule孤儿规则只有当 trait 或类型至少有一个属于本 crate 时才能写 impl结构体与 trait
coherence一致性借用检查之外的「实现唯一性」规则,禁止两个 crate 写出冲突实现结构体与 trait
object safety对象安全 / dyn 兼容trait 能否写成 dyn Trait:方法不能带泛型参数、不能返回 Self泛型与生命周期
associated type关联类型trait 里用 type Item; 声明的「由实现者填」的类型槽位泛型与生命周期
generic泛型用类型参数写一份代码、适配多种类型;单态化后等价于手写多份泛型与生命周期
monomorphization单态化编译期为每组实参生成一份专用代码,是静态分发的实现方式泛型与生命周期
type erasure类型擦除抹掉具体类型只保留接口;Rust 里对应 dyn Trait,Java 泛型是另一种擦除泛型与生命周期
tuple struct元组结构体struct Point(i32, i32); 字段无名字、按序号访问 .0/.1结构体与 trait
unit struct单元结构体struct Marker; 不携带数据的类型,常用于实现 trait 做标记结构体与 trait
enum variant枚举变体enum 的一个可能取值分支,可各自携带不同数据结构体与 trait
pattern matching模式匹配match/if let/let 把值拆开,编译器检查是否覆盖所有情况变量与流程控制
exhaustiveness穷尽性检查编译器要求 match 覆盖所有可能取值,缺一个就报编译错误变量与流程控制
binding绑定(模式绑定)在模式中用名字把匹配到的部分接出来,如 Some(x) 里的 x变量与流程控制
guard守卫(match guard)arm if cond => 形式的附加条件,条件不成立则继续试下一个分支变量与流程控制
slice切片一段连续内存的视图,&[T] 携带地址与长度,不拥有数据所有权
array数组[T; N],长度是类型的一部分,编译期已知,通常分配在栈上变量与流程控制
vector动态数组(不译 VecVec<T>:堆上的可变长连续序列,拥有元素并负责释放集合与迭代器
hash map哈希表(不译 HashMapHashMap<K, V>:平均 O(1) 查找,键无序,迭代顺序不保证集合与迭代器
b-tree mapB 树映射(不译 BTreeMapBTreeMap<K, V>:按键有序,支持范围查询,迭代顺序确定集合与迭代器
iterator迭代器实现 Iterator 的对象,核心只有一个 next() 方法集合与迭代器
adapter适配器消费一个迭代器并返回新迭代器的方法,如 map/filter/take集合与迭代器
consumer消费者真正驱动迭代、返回非迭代器结果的方法,如 collect/sum/fold集合与迭代器
lazy evaluation惰性求值适配器不做事,只有消费者调用 next() 时才逐个计算集合与迭代器
closure闭包能捕获环境的匿名函数,编译器为每个闭包生成唯一匿名类型智能指针与闭包
capture捕获闭包按需借用或夺取外层变量;move 强制按值夺取智能指针与闭包
higher-ranked trait bound高阶 trait 约束(HRTB)for<'a> Fn(&'a T):约束「对任意生命周期都成立」,常见于函数参数智能指针与闭包
trait boundtrait 约束对泛型参数的能力要求,写在 T: Traitwhere泛型与生命周期
where clausewhere 子句把复杂的 trait 约束挪到签名之后,等价于尖括号里的写法泛型与生命周期
impl Traitimpl Trait(不译)参数位置的匿名泛型(静态分发);返回位置则是「某一种具体类型」泛型与生命周期
dyndyn(不译)dyn Trait 的关键字,明确表示这是运行期分发的 trait 对象结构体与 trait
vtable虚表一组函数指针,dyn Trait 靠数据指针 + 虚表指针完成动态调用结构体与 trait
static dispatch静态分发编译期就确定调用哪个函数,可内联、无运行期查找开销结构体与 trait
dynamic dispatch动态分发运行期查虚表决定调用哪个函数,无法内联,换来类型统一结构体与 trait
zero-cost abstraction零开销抽象不用就不付代价,用了也不比手写更差;指运行期成本而非编译期所有权
undefined behavior未定义行为编译器不再保证任何结果的行为,必须靠 unsafe 契约避免测试与性能
unsafeunsafe(不译)显式声明「此处由我负责满足安全前提」,是承诺而非关闭检查测试与性能
raw pointer裸指针*const T/*mut T,可空、可悬垂、不受借用检查,解引用需 unsafe测试与性能
FFIFFI(不译)外部函数接口:与其他语言(多为 C)互相调用函数、共享内存布局测试与性能
macro编译期展开的代码生成器;与函数不同,它接受任意语法、按语法结构分发
declarative macro声明宏macro_rules! 写、按模式匹配展开的宏
procedural macro过程宏接收 token 流并生成新 token 流的 Rust 函数,分 derive/属性/函数式三种
hygiene卫生性宏展开后引入的名字不会意外污染或捕获调用处的名字
fragment specifier片段说明符宏模式里的 $x:expr$t:ty 等,规定这一段要匹配什么语法
attribute属性#[...] 形式附加在条目上的元数据,可被编译器或宏读取结构体与 trait
derivederive(不译)#[derive(Clone, Debug)] 一键生成常见 trait 实现的过程宏结构体与 trait
cfg条件编译(不译 cfg#[cfg(...)] 按目标平台/特性决定代码是否参与编译环境搭建与工具链
feature flag特性开关Cargo 里的可选编译开关,下游用 features = ["..."] 打开工程化与常用 crate
cratecrate(不译)一次编译的基本单位,对应一个库或一个可执行程序环境搭建与工具链
module模块mod 组织的命名空间,控制可见性与路径结构工程化与常用 crate
path路径定位条目的写法:crate::a::bsuper::xself::ystd::vec::Vec工程化与常用 crate
prelude预导入(不译 prelude自动进入作用域的常用名字集合,2024 edition 与旧版不同变量与流程控制
workspace工作区一个 Cargo.toml 下管理多个 crate,共享锁文件与构建缓存工程化与常用 crate
binary二进制(可执行程序)src/main.rs 产出的可执行目标,不能作为依赖被别的 crate use工程化与常用 crate
librarysrc/lib.rs 产出的 crate,可被集成测试与下游项目依赖工程化与常用 crate
dependency依赖[dependencies] 里声明、由 crates.io 或本地路径提供的第三方 crate环境搭建与工具链
semantic versioning语义化版本MAJOR.MINOR.PATCH0.x 的次版本升级也可能破坏兼容工程化与常用 crate
lockfile锁文件Cargo.lock 记录实际使用的精确版本,保证可重现构建环境搭建与工具链
MSRV最低支持 Rust 版本声明这个 crate 能被哪个最低版本的编译器编译,常写在 rust-version工程化与常用 crate
lintlint(不译)编译器内置的代码检查项,可按 allow/warn/deny/forbid 分级工程化与常用 crate
rustfmtrustfmt(不译)官方格式化工具,cargo fmt 调用,把风格争论交给它环境搭建与工具链
clippyclippy(不译)官方静态检查工具,cargo clippy 调用,给出惯用法建议环境搭建与工具链
doctest文档测试把文档注释里的代码块当测试跑,保证示例不会过期测试与性能
unit test单元测试与被测代码同文件、放在 #[cfg(test)] mod tests 里的私有测试测试与性能
integration test集成测试放在 tests/ 目录、只使用 crate 公开 API 的测试测试与性能
benchmark test基准测试测量代码耗时/吞吐,稳定 Rust 上常用 criterion 一类 crate测试与性能
fuzzing模糊测试用随机/变异输入狂轰入口,找 panic 与未定义行为测试与性能
mirimiri(不译)官方 MIR 解释器,能检测未定义行为,需 nightly 组件测试与性能
thread线程操作系统调度的执行流,std::thread::spawn 创建,栈大小可配置并发编程
concurrency并发多个任务在时间上交错推进(不一定同时执行)并发编程
parallelism并行多个任务在同一时刻真正同时执行,是多核加速的前提并发编程
data race数据竞争至少一个写、无同步的并发访问同一内存;Rust 在安全代码里直接禁止并发编程
race condition竞态条件结果依赖执行时序的逻辑 bug;数据竞争只是它的一种,编译期查不出来并发编程
deadlock死锁互相等待对方持有的锁,程序永久卡住;Rust 不替你检查并发编程
mutex互斥锁(不译 Mutex同一时刻只允许一个持有者访问数据,锁与数据绑定在一起并发编程
rwlock读写锁(不译 RwLock允许多个读者或一个写者并发,读多写少时更划算并发编程
atomic原子类型AtomicUsize 一类不发生数据竞争的整数/指针类型,需指定内存顺序并发编程
memory ordering内存顺序原子操作之间的可见性/重排约束,如 Relaxed/Acquire/Release/SeqCst并发编程
channel通道线程间单向传值的队列,std::sync::mpsc 是最小可用版本并发编程
message passing消息传递通过通信共享内存:把数据 move 进通道,而不是共享可变状态并发编程
SendSend(不译)标记 trait:该类型的值可以安全地移动到另一个线程并发编程
SyncSync(不译)标记 trait:&T 可以安全地在多个线程间共享并发编程
asyncasync(不译)把函数/代码块变成状态机,调用只得到 Future 而不立即执行异步编程
awaitawait(不译)async 上下文里挂起当前任务、等待 Future 就绪的语法异步编程
futurefuture(不译)表示「将来会产出一个值」的类型,核心是 poll 方法异步编程
poll轮询(不译 poll执行器询问 future 是否就绪;返回 Pending 时必须注册唤醒器异步编程
executor执行器反复 poll 任务并在就绪时推进它们的调度组件异步编程
runtime运行时(不译 runtime执行器 + 反应器 + 定时器等的打包,如 tokio异步编程
task任务交给执行器调度的独立 future;与线程是多对多关系,可跨线程迁移异步编程
pin固定(不译 Pin承诺「值被固定后不再移动」,自引用 future 的正确性依赖它异步编程
cancellation safety取消安全性在任意 .await 点被 drop 后,逻辑仍保持一致、不丢数据异步编程
backpressure背压消费者跟不上时让生产者减速或排队受限,避免内存无限增长异步编程
serdeserde(不译)序列化框架:类型只实现 Serialize/Deserialize,格式由后端决定工程化与常用 crate
token stream词法单元流过程宏的输入输出形式,TokenStream 是比字符串更精确的代码表示
span源码区间(不译 spantoken 记录的位置信息,过程宏靠它报出指向正确位置的错误

A.2 易混词对比(每条都有「怎么选」结论)

💡 对照:这几组词是初学者搜索量最高的「到底用哪个」问题。 结论列可以直接当决策规则背下来,不必每次都重新推理。

A.2.1 &T vs &mut T

维度&T&mut T
同时存在的个数任意多个同一时刻只能一个
能否读
能否改不能
与对方共存&T 时不能有 &mut T&mut T 时不能有任何 &T
其他语言里的近似物Java 的 final 引用(但不保证对象不变)C 的指针(但没有别名检查)
怎么选默认先用 &T;只有确实要写入时才升级为 &mut T需要修改、或需要移动出内部字段时用

⚠️ 陷阱&T 只保证你不能通过它改,不保证别人不改。 若类型内部有 Cell/RefCell/Mutex&T 也能改内部状态(见 A.2.5)。

A.2.2 String vs &str vs str

维度str&strString
大小不定长(!Sized胖指针(地址 + 长度)三字段(ptr/len/capacity
存放位置只在别处、被引用可能指向 String 或字符串字面量堆上自有的 UTF-8 缓冲
拥有数据
能否增长能(push_strpush
能否单独作变量类型不能,必须 Box<str>&str
怎么选函数参数一律写 &str只读的字符串视图需要拥有、需要修改时用

🧠 原理:写 fn f(s: &str) 后,&String 会经解引用强制转换(deref coercion) 自动变成 &str,所以调用方既能传 &String 也能传字面量;写 &String 则两头都难受。

A.2.3 Vec<T> vs [T; N] vs &[T]

维度[T; N]Vec<T>&[T]
长度类型的一部分,编译期固定运行期可变运行期已知,但不可变
存放位置通常在栈(或结构体内部)数据在堆上借用别处的连续内存
能否增长不能不能
拥有数据
其他语言对应C 的数组、Go 的数组Java 的 ArrayList、Python 的 listGo 的 slice(只读版)
怎么选长度固定且不大时用需要拥有/增删元素时用函数参数一律写 &[T]

A.2.4 Rc<T> vs Arc<T>

维度Rc<T>Arc<T>
计数方式普通整数增减原子操作
线程安全否,不实现 Send/Sync是(当 T: Send + Sync
性能更快每次克隆多一次原子操作开销
能否跨线程不能,编译器直接拦下
怎么选单线程共享所有权用 Rc只要可能跨线程就用 Arc,别为省一点开销留隐患

⚠️ 陷阱RcArc不允许通过它们修改内部值(没有 &mut)。 要「共享 + 可改」得配 RefCell(单线程)或 Mutex/RwLock(多线程)。

A.2.5 Cell<T> vs RefCell<T>

维度Cell<T>RefCell<T>
取值方式get()(要求 T: Copy)或 replace/takeborrow() / borrow_mut()
借用检查时机无借用,直接复制/替换运行期计数,违反规则时 panic
能否拿到内部引用不能(除非自己用 UnsafeCell 实现)能,borrow_mut() 给出 RefMut<T>
可否跨线程
怎么选值小、是 Copy、只需整体替换/计数时用 Cell需要可变引用、需要读后修改时用 RefCell

🧠 原理RefCell 的 panic 是运行期的,编译器帮不了你。 判断信号:出现 already borrowed: BorrowMutError,说明运行期借用规则被违反了。

A.2.6 Mutex<T> vs RwLock<T>

维度Mutex<T>RwLock<T>
并发度任意时刻 1 个访问者多个读者,或 1 个写者
锁开销较小较大,且各平台实现差异明显
饥饿风险较低写者可能被持续到来的读者饿死(依实现而定)
常见配套Arc<Mutex<T>>Arc<RwLock<T>>
怎么选默认 Mutex读远多于写、且读临界区较长时才考虑

⚠️ 陷阱RwLock 并非一定更快。读临界区很短时,它的记账开销可能比 Mutex 还贵; 需要实测,别凭直觉换。

A.2.7 Fn / FnMut / FnOnce

维度FnOnceFnMutFn
可调用次数至少一次(可以只用一次)任意多次任意多次
捕获访问方式可取走捕获值可修改捕获值只读捕获值
三者关系Fn: FnMut: FnOnce(后者更宽松)同左同左
典型例子把捕获的 String move 出去计数器 count += 1只读打印捕获变量
怎么选参数类型尽量写 FnOnce,对调用方限制最小需要改状态时用只需只读时用

A.2.8 impl Trait vs dyn Trait

维度impl Traitdyn Trait
分发方式静态分发(单态化)动态分发(查虚表)
运行期开销无,可内联一次间接调用,通常无法内联
能否混装不同类型不能,一个位置只能是一种具体类型能,Vec<Box<dyn Trait>> 可装多种
二进制体积每种类型一份代码,可能膨胀一份代码
位置限制参数位置任意;返回位置只能单一具体类型需要指针包装:&dyn/Box<dyn>/Arc<dyn>
怎么选优先 impl Trait(快、类型安全)需在集合里装不同实现或给插件留接口时用

🧠 原理:返回 impl Trait 的函数,返回类型由编译器推断但调用方看不见, 所以无法再调用该具体类型独有的方法,也无法为它单独写 impl

A.2.9 move 闭包 vs move 语义

维度move || ... 闭包let b = a;(move 语义)
作用对象闭包捕获外层变量的方式赋值/传参时值的所有权转移
结果变量被闭包按值拿走(Copy 类型是复制)原变量在 move 之后不可再用
常见触发场景thread::spawn、返回闭包、async moveString/Vec 给函数、装进结构体
是否一定导致原变量失效是(对非 Copy 类型)是(对非 Copy 类型)
怎么选闭包要活得比当前函数久时必须 move不需要原变量时直接 move,比 clone 便宜

⚠️ 陷阱move 闭包拿走所有权后,外层变量就不能再用了。 若同时还要用,先 .clone() 一份喂给闭包,或改成传引用并保证生命周期足够长。

A.2.10 panic! vs Result

维度panic!Result<T, E>
触发时机运行期,立刻展开栈或中止进程编译期强制你处理(#[must_use]
调用方能否恢复默认不能(可 catch_unwind,但不推荐当控制流)
适用场景编程错误、不变量被破坏、测试断言可预期的失败:IO、解析、网络
库的默认策略尽量避免,除非「调用方用错了」默认返回 Result,让调用方决定
怎么选不可恢复的 bug 才 panic!可恢复的失败一律返回 Result,配 ? 向上传播

A.2.11 Clone vs Copy

维度CopyClone
触发方式隐式:赋值、传参、放进容器都会复制显式:必须写 .clone()
语义按位复制(bitwise copy)任意逻辑,可做深拷贝
Drop 关系互斥:实现了 Drop 的不能是 Copy可以同时实现
典型类型i32boolchar&T[T; N](当 T: CopyStringVec<T>Rc<T>Arc<T>
怎么选小且无资源的类型加 Copy,让 API 更好用需要独立副本时显式 .clone(),并注释说明为何必须克隆

A.2.12 'static 的两种含义

说法准确含义例子
「这个引用活到程序结束」指向的数据在整个程序运行期都有效let s: &'static str = "hello";
「这个类型不借用短期数据」类型里不含'static 的借用;值本身可以是局部的fn f<T: 'static>(t: T) 接受 String
怎么选看到 T: 'static不要理解成「值必须永远活着」它只排除「带短期引用的类型」

⚠️ 陷阱Box<dyn Error + 'static> 里的 'static 属于第二种含义。 它表示错误对象内部没有借用栈上的数据,而不是「错误对象永不释放」。


A.3 不翻译的保留词清单

以下词在正文中一律保留英文。理由:中文译名会让代码与散文对不上, 读者搜索时也搜不到对应资料。首次出现时写成「中文(English)」即可,之后直接用英文。

类别保留词说明
语法关键字let mut fn struct enum impl trait mod use where match if else loop while for return move ref dyn async await unsafe const static type as in pub crate self super语法关键字,写中文会导致代码与正文错位
trait 名Copy Clone Debug Display Drop Default Iterator IntoIterator Send Sync Sized Unpin Deref From Into TryFrom TryInto AsRef Borrow类型系统里的专有名词,翻译反而歧义
类型名Option Result Some None Ok Err Box Rc Arc Cell RefCell Mutex RwLock Vec String HashMap BTreeMap Pin Cow AtomicUsize代码里必须原样写,正文也保持一致
trait object 相关dyn vtable impl Trait dyn Trait「动态 trait 对象」这类说法太长且易误解
工具链cargo rustc rustup rustfmt clippy miri rustdoc serde tokio criterion命令与 crate 名,翻译后无法复制粘贴
Cargo 配置Cargo.toml Cargo.lock [dependencies] [features] [dev-dependencies] workspace edition rust-version配置文件里就是这些字面量
诊断术语lint warn deny allow forbid span error code与编译器输出一一对应

💡 对照:Java 社区会把 interface 译成「接口」,因为 Java 的关键字本身就有通用语义; 但 Rust 的 trait 没有等价的既有中文概念,硬译成「特征」会让它和日常用词混淆, 因此本站选择保留 trait


A.4 已废弃或易误解的旧译名提醒

下表列出常见但本站不采用的译法。「本文档采用」一栏是唯一合法写法。

英文常见旧译 / 误译问题本文档采用
borrow出借「出借」暗示要归还所有权,而借用只是临时访问权限,且 &mut 还有独占性借用
ownership拥有权、持有权与「所有权」混用会破坏检索一致性所有权
lifetime生存期、寿命「生存期」听起来像运行期时长,而 'a 描述的是引用之间的关系生命周期
move搬移、转移「转移」容易与「拷贝」混淆;move 是所有权换手,不是数据搬家移动(移动语义)
trait特征、特性feature(特性开关)撞名,且 trait 是可带实现的契约trait(不译)
trait object特征对象同上,且按旧译搜索不到资料trait 对象
feature / feature flag特性、功能与 trait 的旧译「特征」混淆特性开关feature flag
coherence连贯性无法传达「实现必须唯一」这层含义一致性
object safety对象安全性容易被读成「内存安全」对象安全,首次出现时注明旧称
elision省略法则「法则」让人以为是必背清单,其实只是三条机械规则(生命周期)省略
variance变异性与「可变性」mutability 撞词型变,子项用协变/逆变/不变
mutability可变性与型变区分开即可,但不要写成「易变性」可变性
interior mutability内部易变性不知所云内部可变性
deref coercion解引用强制转换太长,但正文必须固定,不要一会儿写「自动解引用」解引用强制转换
blanket impl毯式实现、地毯实现直译不通,读者无法理解「给所有满足约束的类型统一实现」泛型实现,首次注明 blanket impl
orphan rule孤儿法则可以接受,但必须与「孤儿规则」统一孤儿规则
monomorphization单态化 / 单形化「单形化」少见,破坏检索单态化
unsized无尺寸、不定长两者都能见到,需固定不定长?Sized 语境下用「大小未知」
ZST(zero-sized type)零尺寸类型可以接受,但不要写成「零大小」零大小类型(ZST)
RAII资源获取即初始化(直译)直译句子不通顺,需保留缩写RAII,首次写「资源获取即初始化(RAII)」
UB(undefined behavior)未定义行为 / 不明确行为「不明确」严重误导:UB 不是「结果不确定」,而是不再保证任何事未定义行为(UB)
panic恐慌、崩溃「恐慌」拟人化过强;「崩溃」不准确(默认是展开栈,可被捕获)panic(不译)
unwrap解包、拆包与解构的「拆包」混淆unwrap(不译),必要时说「unwrap 掉」
closure闭包 / 闭包式函数「闭包式函数」是错译,闭包不是函数的一种语法糖闭包
capture捕捉「捕捉」多用于异常,与环境捕获的语义不符捕获
dangling pointer悬空指针 / 悬垂指针两种都有,需固定悬垂指针
fat pointer胖指针形象且通用,但要固定用「胖指针」胖指针
static dispatch 里的 static静态的(与「静止」混淆)这里指编译期,不是「不变化」静态分发,并说明与 static 变量无关
guard(match guard)卫语句、守护Go 的 guard clause 是另一回事守卫match guard
binding绑定 / 绑扎「绑扎」不可用绑定
predicate谓词数学味重但通用,可接受谓词where 语境下用约束条件

⚠️ 陷阱:读者若在网上先看到「出借」「生存期」「特征」等旧译, 回到本站时容易以为讲的是别的东西。写作时遇到这些词,先按本表译法改一次再引用。


A.5 术语使用自检清单

写完任何一章后,用下面几条自查:

延伸阅读

  • Rust Book · 关键字附录官方, 官方关键字与运算符列表,判断某词是否属于语法关键字时的第一依据。
  • Rust Reference · Glossary官方, 参考手册的术语定义,用于确认 dynunsizedvariance 等词的精确含义。
  • The Rustonomicon官方, unsafe 与未定义行为指南,UBvtable、型变的深入解释在此。
  • Rust API 指南官方, API 设计约定,判断 Copy/Clone 何时该实现的依据之一。
  • Rust 语言圣经(中文)非官方, 社区中文教程,术语旧译较多,对照本附录使用时注意差异。

内容以 rustc 1.98.1 · Rust 2024 edition 为基准