Skip to content

Rust 附录:快速参考手册 ​

个人学习笔记 — 整理自 The Rust Programming Language 本文档用作日常开发中的速查表,涵盖关键字、运算符、可派生 trait、开发工具、版本差异和发布流程。


附录 A:关键字(Keywords) ​

关键字是 Rust 语言保留的标识符,不能用作变量名、函数名等(除非使用原始标识符 r#)。

当前正在使用的关键字 ​

关键字说明
as类型转换;在 use 语句中重命名导入项
async返回 Future 而非阻塞当前线程
await挂起执行,等待 Future 就绪
break立即退出循环
const定义常量或常量裸指针
continue跳到下一次循环迭代
crate模块路径中指向 crate 根
dyn动态分发到 trait 对象
elseif / if let 的备选分支
enum定义枚举类型
extern链接外部函数或变量
false布尔字面量 false
fn定义函数或函数指针类型
for迭代循环;实现 trait;声明高阶生命周期
if条件分支
impl实现固有方法或 trait
infor 循环的一部分
let绑定变量
loop无条件循环
match模式匹配
mod定义模块
move让闭包获取捕获变量的所有权
mut表示引用、裸指针或模式绑定的可变性
pub表示公开可见性
ref按引用绑定
return从函数返回
Self当前正在定义/实现的类型的别名
self方法接收者或当前模块
static全局变量或贯穿整个程序的生命周期
struct定义结构体
super当前模块的父模块
trait定义 trait
true布尔字面量 true
type定义类型别名或关联类型
union定义联合体(仅在联合体声明时为关键字)
unsafe标记不安全代码、函数、trait 或实现
use将符号引入作用域
where类型约束子句
while条件循环

保留供将来使用的关键字 ​

关键字关键字关键字关键字
abstractbecomeboxdo
finalgenmacrooverride
privtrytypeofunsized
virtualyield

原始标识符 ​

用 r# 前缀可以把关键字当作标识符使用:

rust
fn r#match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

典型场景:调用旧版 edition 编写的库中以新版关键字命名的函数(如 2015 edition 的 try 函数)。


附录 B:运算符与符号 ​

B-1 运算符 ​

运算符示例说明可重载 trait
!ident!(...)宏调用—
!!expr按位/逻辑取反Not
!=expr != expr不等比较PartialEq
%expr % expr取余Rem
%=var %= expr取余并赋值RemAssign
&&expr, &mut expr借用—
&&type, &mut type借用指针类型—
&expr & expr按位与BitAnd
&=var &= expr按位与并赋值BitAndAssign
&&expr && expr短路逻辑与—
*expr * expr乘法Mul
*=var *= expr乘法并赋值MulAssign
**expr解引用Deref
**const type, *mut type裸指针—
+trait + trait复合类型约束—
+expr + expr加法Add
+=var += expr加法并赋值AddAssign
,expr, expr参数/元素分隔符—
--expr取负Neg
-expr - expr减法Sub
-=var -= expr减法并赋值SubAssign
->fn(...) -> type函数/闭包返回类型—
.expr.ident字段访问—
.expr.ident(...)方法调用—
.expr.0元组索引—
..expr..expr右排他范围PartialOrd
..=expr..=expr右包含范围PartialOrd
....expr结构体更新语法—
..variant(x, ..)"其余部分" 模式绑定—
/expr / expr除法Div
/=var /= expr除法并赋值DivAssign
:pat: type类型约束—
:ident: expr结构体字段初始化—
:'a: loop {}循环标签—
;expr;语句终止符—
;[...; len]固定大小数组语法—
<<expr << expr左移Shl
<<=var <<= expr左移并赋值ShlAssign
<expr < expr小于PartialOrd
<=expr <= expr小于等于PartialOrd
=var = expr赋值—
==expr == expr相等比较PartialEq
=>pat => exprmatch 分支语法—
>expr > expr大于PartialOrd
>=expr >= expr大于等于PartialOrd
>>expr >> expr右移Shr
>>=var >>= expr右移并赋值ShrAssign
@ident @ pat模式绑定—
^expr ^ expr按位异或BitXor
^=var ^= expr按位异或并赋值BitXorAssign
|pat | pat模式选择—
|expr | expr按位或BitOr
|=var |= expr按位或并赋值BitOrAssign
||expr || expr短路逻辑或—
?expr?错误传播—

B-2 独立语法符号 ​

符号说明
'ident命名生命周期或循环标签
数字u8, 数字i32, 数字f64 等指定类型的数字字面量
"..."字符串字面量
r"...", r#"..."#原始字符串字面量(不处理转义)
b"..."字节串字面量
br"...", br#"..."#原始字节串字面量
'...'字符字面量
b'...'ASCII 字节字面量
|…| expr闭包
!never 类型(发散函数的底类型)
_忽略绑定的模式;也用于增强整数可读性

B-3 路径相关语法 ​

符号说明
ident::ident命名空间路径
::path从 crate 根开始的绝对路径
self::path相对于当前模块的路径
super::path相对于父模块的路径
type::ident关联常量、函数、类型
<type as trait>::ident完全限定语法
trait::method(...)通过 trait 名消歧方法调用
type::method(...)通过类型名消歧方法调用

B-4 泛型语法 ​

符号说明
path<...>为泛型类型指定参数(如 Vec<u8>)
path::<...>turbofish 语法(如 "42".parse::<i32>())
fn ident<...>定义泛型函数
struct ident<...>定义泛型结构体
enum ident<...>定义泛型枚举
impl<...>定义泛型实现
for<...> type高阶生命周期约束
type<ident=type>带关联类型赋值的泛型(如 Iterator<Item=T>)

B-5 Trait 约束语法 ​

符号说明
T: U泛型 T 须实现 U
T: 'aT 的生命周期须长于 'a
T: 'staticT 不含除 'static 外的借用引用
'b: 'a生命周期 'b 须长于 'a
T: ?Sized允许 T 为动态大小类型
'a + trait, trait + trait复合约束

B-6 宏与属性 ​

符号说明
#[meta]外部属性
#![meta]内部属性
$ident宏替换变量
$ident:kind宏元变量
$(...)...宏重复
ident!(...), ident!{...}, ident![...]宏调用

B-7 注释 ​

符号说明
//行注释
//!内部行文档注释
///外部行文档注释
/*...*/块注释
/*!...*/内部块文档注释
/**...*/外部块文档注释

B-8 括号用法 ​

符号说明
()空元组(unit),既是字面量也是类型
(expr)括号表达式
(expr,)单元素元组表达式
(expr, ...)元组表达式
expr(expr, ...)函数调用;也用于初始化元组结构体
{...}块表达式
Type {...}结构体字面量
[...]数组字面量
[expr; len]包含 len 个 expr 副本的数组
[type; len]包含 len 个 type 实例的数组类型
expr[expr]集合索引(可重载 Index/IndexMut)
expr[a..b]集合切片

附录 C:可派生的 Trait(Derivable Traits) ​

使用 #[derive(...)] 属性可以自动为结构体或枚举生成 trait 实现。

Trait启用的能力派生行为典型使用场景
Debug{:?} 格式化输出递归打印所有字段调试打印;assert_eq! 要求
PartialEq== 和 != 运算符所有字段逐一比较相等性判断;assert_eq! 要求
Eq标记完全等价关系无额外方法(标记 trait)HashMap 的键要求;前提:已实现 PartialEq
PartialOrd<, >, <=, >= 运算符按字段声明顺序比较,返回 Option<Ordering>排序比较;范围表达式;前提:已实现 PartialEq
Ord完全排序返回 Ordering(始终有效)BTreeSet/BTreeMap 要求;前提:已实现 PartialOrd + Eq
Clone.clone() 深拷贝递归调用各字段的 clone()需要显式复制值时(如 to_vec())
Copy赋值时自动按位复制(栈上)无方法(标记 trait)轻量值类型优化;前提:已实现 Clone,且所有字段均为 Copy
Hash.hash() 哈希映射组合各字段的哈希值HashMap/HashSet 的键要求
DefaultDefault::default() 默认值递归调用各字段的 default()结构体更新语法 ..Default::default();unwrap_or_default()

注意:Display trait 不可派生——需要你手动实现,因为面向用户的输出格式需要你自己决定。

记忆口诀 ​

  • 要打印 → Debug
  • 要比较 → PartialEq(+ Eq 如果不含 NaN 类值)
  • 要排序 → PartialOrd(+ Ord 如果任意两值都可比)
  • 要复制 → Clone(+ Copy 如果是纯栈数据)
  • 要哈希 → Hash
  • 要默认值 → Default

附录 D:开发工具速查 ​

rustfmt — 自动格式化 ​

操作命令
格式化整个 Cargo 项目cargo fmt
仅检查格式(不修改)cargo fmt -- --check
格式化单个文件rustfmt src/main.rs

按社区统一风格格式化代码,只改样式不改语义。可通过 rustfmt.toml 配置。

rustfix — 自动修复编译警告 ​

操作命令
自动修复警告cargo fix
迁移到新 editioncargo fix --edition
允许修改已暂存文件cargo fix --allow-staged

自动应用编译器建议的修复。例如移除多余的 mut。

Clippy — 静态分析 / Lint ​

操作命令
运行所有 lintcargo clippy
将警告视为错误cargo clippy -- -D warnings
自动修复 Clippy 建议cargo clippy --fix

能捕获常见错误和非惯用写法,比如用近似值代替 std::f64::consts::PI。

rust-analyzer — IDE 集成 ​

功能说明
自动补全输入时实时建议
跳转到定义快速导航到符号定义处
内联错误提示编辑器内实时显示编译错误
类型推断提示显示变量的推断类型

基于 Language Server Protocol,支持 VS Code、Neovim 等主流编辑器。


附录 E:Rust 版次(Editions) ​

Rust 每隔约三年发布一个新版次,将零散改进整合为一个清晰的里程碑。

版次发布年份主要变化
20152015初始版本;Rust 1.0 的基准
20182018async/await;模块系统改进;dyn trait 语法;try 成为保留字
20212021闭包捕获优化(disjoint capture);IntoIterator for arrays;新 prelude
20242024最新版次;本书使用的版本

关键要点 ​

  • 在 Cargo.toml 中通过 edition = "2024" 指定版次
  • 不指定则默认使用 2015(向后兼容)
  • 不同版次的 crate 可以互相链接——版次只影响编译器的解析方式
  • 使用 cargo fix --edition 自动迁移代码到新版次
  • 大多数新特性在所有版次都可用;仅涉及新关键字等不兼容变更时才需要切换版次

附录 G:Rust 的发布流程 ​

发布渠道 ​

渠道更新频率用途
Nightly每天包含实验性功能(需 feature flag 开启);面向尝鲜者
Beta每 6 周从 nightly 分支下一个 stable 的候选版本;用于 CI 回归测试
Stable每 6 周从 beta 分支生产环境使用;保证向后兼容

火车模型(Train Model) ​

text
nightly:  * - - * - - * - - * - - * - - * - * - *
               |                         |
beta:          * - - - - - - - - *       *
                       |
stable:                          *

每 6 周一趟"火车":nightly → beta → stable。错过这趟车?6 周后还有下一趟。

常用 rustup 命令 ​

操作命令
安装 nightlyrustup toolchain install nightly
查看已安装的工具链rustup toolchain list
当前项目使用 nightlyrustup override set nightly
切回 stablerustup override set stable
更新所有工具链rustup update

不稳定功能(Unstable Features) ​

  • 仅在 nightly 上可用
  • 需在源码中使用 #![feature(功能名)] 显式开启
  • beta 和 stable 不能使用 feature flag
  • 经过充分测试后功能会被稳定化(stabilize),移除 feature gate 并进入 stable

RFC 流程 ​

新功能的生命周期:提案 (RFC) → 团队审核 → 接受 → 实现(在 nightly 上带 feature flag) → 稳定化 → 进入 stable 发布


最后更新:2026-02 | 基于 The Rust Programming Language (2024 Edition)