宏是在编译时执行的特殊函数。 通常,宏的输入是传递给它的代码的抽象语法树(AST)。 然后,宏可以对其进行转换并返回转换后的AST。 这可用于添加自定义语言功能并实现 领域特定语言(DSL) 。

宏调用是一种语义分析 会完全从上到下,从左到右进行的情况。相反,语义分析至少发生两次:

  • 语义分析识别并解析宏调用。
  • 编译器执行宏体(可以调用其他触发器)。
  • 它将宏调用的AST替换为宏返回的AST。
  • 它重复了代码区域的语义分析。
  • 如果宏返回的AST包含其他宏调用,则此过程将进行迭代。

虽然宏启用了高级编译时代码转换,但它们无法更改Nim的语法。 但是,这并不是真正的限制因为Nim的语法无论如何都足够灵活。