Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

编译期是什么

「编译期」指 Sui Move 编译器(sui move build / move build)在你把包发布上链之前完成的阶段。链上验证者执行的是字节码,不会再次运行宏展开。

一条典型的编译管线(概念)

  1. 解析(Parse):将源码解析为抽象语法树(AST)。
  2. 宏展开(Macro expansion):遇到 name!(...) 调用,按宏定义把参数片段嵌入宏体,生成更大的 AST。你的自定义 macro fun 和标准库宏都在这一阶段处理。
  3. 类型检查与借用检查:在展开后的 AST 上运行,与普通 fun 相同。
  4. 能力/验证器检查(Sui):对象模型、可发布性等。
  5. 代码生成:生成 Move 字节码,最终进入链上存储与执行。

因此:「编译期」≈ 在你本机(或 CI)执行 build「运行时」≈ 交易执行、读写对象、扣 Gas

与链上执行的分界

阶段在哪里发生宏是否参与
宏展开、类型检查本地 / CI 编译
交易执行验证者节点否(只有字节码)

理解这一点有助于排错:宏相关的错误信息往往出现在展开后的代码位置附近,但编译器会尽量把位置映射回宏调用处(与 assert! 行号行为类似,见 §11.8)。

小结

宏在编译期完成展开;链上只看到展开后的逻辑。下一节给出 macro fun 的完整定义方式与可见性规则。