01
宏基础:声明宏
macro_rules! 语法与模式匹配,重复操作符(*、+、?)的使用。
声明宏模式匹配
02
声明宏实战
实现一个 vec! 宏的简化版本,理解元变量与转译器。
vec!元变量
03
过程宏入门
过程宏的分类(派生宏、属性宏、函数宏),与声明宏的区别。
派生宏属性宏函数宏
04
派生宏(Derive Macro)
使用 syn 和 quote 库实现自定义派生宏,为结构体自动实现 Trait。
synquoteTrait
05
属性宏(Attribute Macro)
编写属性宏,为函数或结构体添加自定义行为(如日志、缓存)。
属性宏日志缓存
06
函数宏(Function-like Macro)
实现一个类似 println! 的函数宏,处理可变参数。
函数宏可变参数
07
TokenStream 深入
理解 proc_macro::TokenStream,操作 TokenTree(Ident、Punct、Group、Literal)。
TokenStreamTokenTree
08
syn 库详解
解析 Rust 语法树,使用 syn::parse、syn::DeriveInput 等核心类型。
syn语法树
09
quote 库详解
使用 quote! 宏生成 TokenStream,处理插值与重复。
quote!插值
10
宏调试技巧
使用 eprintln!、proc_macro::Diagnostic、cargo expand 进行宏调试。
调试cargo expand
11
宏的卫生性(Hygiene)
理解宏的标识符作用域,避免命名冲突。
卫生性作用域
12
宏的递归与复杂性控制
递归宏的实现,防止栈溢出与编译膨胀。
递归宏编译膨胀
13
内部可变性概念
什么是内部可变性,为什么需要它,与外部可变性的对比。
内部可变性对比
14
Cell<T>
Cell 的 get、set、get_mut 方法,适用于 Copy 类型。
CellCopy
15
RefCell<T>
RefCell 的 borrow、borrow_mut,运行时借用检查,panic 风险。
RefCell借用检查
16
RefCell 实战
实现一个带有内部可变性的缓存系统。
缓存内部可变性
17
Cell 与 RefCell 的选择
何时用 Cell,何时用 RefCell,性能与安全性权衡。
CellRefCell权衡
18
OnceCell 与 LazyCell
单次初始化模式,lazy_static! 与 once_cell 库。
OnceCelllazy_static!
19
Mutex<T> 与 RwLock<T>
线程安全的内部可变性,互斥锁与读写锁。
MutexRwLock线程安全
20
Atomic 类型
AtomicBool、AtomicUsize 等,无锁内部可变性。
Atomic无锁
21
内部可变性与借用规则
理解 unsafe 与 UnsafeCell,内部可变性的底层原理。
UnsafeCell底层
22
UnsafeCell 深入
UnsafeCell 的原始指针操作,实现自定义内部可变类型。
原始指针自定义
23
内部可变性在标准库中的应用
Rc、Arc、Cow 中的内部可变性。
RcArcCow
24
宏与内部可变性结合
使用宏简化内部可变性模式的代码(如自动生成 getter/setter)。
宏getter/setter
25
宏与 DSL(领域特定语言)
使用宏构建内部可变性的 DSL,如配置系统。
DSL配置系统
26
性能优化
宏展开后的代码大小控制,内部可变性的运行时开销分析。
性能代码大小
27
测试宏
为宏编写单元测试与集成测试,使用 trybuild 测试编译错误。
测试trybuild
28
宏的文档与发布
为宏编写文档注释,发布到 crates.io 的最佳实践。
文档crates.io
29
实战项目一:ORM 框架
使用宏与内部可变性实现一个简单的 ORM 框架。
ORM实战
30
实战项目二:事件系统
使用宏与内部可变性实现一个事件系统(Event Emitter)。
Event Emitter实战