第十一章 · Move 宏函数详解
本书目录中,本章位于 第十章 · 使用对象 之后、第十二章 · 高级可编程性 之前,在侧边栏中单独列为 「Move 宏函数」 篇。
宏函数(macro fun)是 Move 在 Move 2024 中提供的元编程机制:在编译期把调用点「展开」成普通 Move 代码,从而在不增加运行时开销的前提下,表达高阶抽象(循环、惰性分支、代码复用)。本章从动机、编译管线、语法与展开语义讲起,再系统梳理标准库中 vector / option 等常用宏,并给出排错与选型建议。
本章内容
| 节 | 主题 | 你将学到 |
|---|---|---|
| 7.1 | 为什么需要宏函数 | 与泛型函数对比、惰性代码、零成本抽象 |
| 7.2 | 编译期是什么 | 解析、类型检查、宏展开、字节码与链上执行的分界 |
| 7.3 | 宏函数的定义 | macro fun、$ 参数、可见性、与 fun 的差异 |
| 7.4 | 展开与求值语义 | 表达式代入、! 调用、与函数调用的本质区别 |
| 7.5 | Lambda 与代码块参数 | 语义与 fun 对比、类型形式、定义/捕获/实例、仅宏可用与常见误区 |
| 7.6 | 标准库:向量宏 | do! / fold! / tabulate! / destroy! 等 |
| 7.7 | 标准库:Option、assert! 与其它 | do!、destroy_or!、BCS peel_*!、测试宏 |
| 7.8 | 常见误区与排错 | 报错位置、类型不满足、与手写循环的取舍 |
| 7.9 | 小结与选型 | 何时用宏、何时用手写循环或普通函数 |
节与正文、示例代码
学习目标
读完本章后,你将能够:
- 说明宏在编译期展开的含义,以及它与普通
fun在传参/求值上的差异 - 正确编写
macro fun、使用$参数与 lambda 形参 - 熟练运用
vector/option标准库宏,并知道assert!、BCSpeel_*!的典型场景 - 根据报错定位到调用处或展开后的代码,并做出工程上的取舍
与第六章的关系
第六章 §6.8 提供最短上手;本章是系统篇。
本章实战练习
见 hands-on.md。