Macros 什么时候执行宏扩展?

Macros 什么时候执行宏扩展?,macros,racket,Macros,Racket,我正在学习(计划的语言继承者)。没有提及何时执行宏展开。在文档的第17页,我发现了一段话,说它发生在类型检查、评估和编译之前 因此,如果我理解正确,宏扩展会在构建抽象语法树(AST)后立即进行。尽管Racket专家可能会纠正我的错误,但我的理解是,主要阶段是: 将输入字符处理为语法对象的读取过程 递归扩展语法对象的扩展过程,包括使用用户定义的宏 评估。(JIT编译在求值期间发生,只要调用尚未编译的函数。) 换句话说,REPL(读取评估打印循环)实际上更像REEPL(读取扩展评估打印循环) 有关详

我正在学习(计划的语言继承者)。没有提及何时执行宏展开。在文档的第17页,我发现了一段话,说它发生在类型检查、评估和编译之前


因此,如果我理解正确,宏扩展会在构建抽象语法树(AST)后立即进行。

尽管Racket专家可能会纠正我的错误,但我的理解是,主要阶段是:

  • 将输入字符处理为语法对象的读取过程

  • 递归扩展语法对象的扩展过程,包括使用用户定义的宏

  • 评估。(JIT编译在求值期间发生,只要调用尚未编译的函数。)

  • 换句话说,REPL(读取评估打印循环)实际上更像REEPL(读取扩展评估打印循环)

    有关详细程度的信息,请参见包括,例如,章节

    你提到“类型检查”

    • 纯Racket(例如,
      #lang Racket
      )是动态键入的,并在运行时进行检查
    • 类型化的Racket(例如,
      #lang Typed/Racket
      )在扩展期间执行静态类型检查:类型化的Racket系统通过宏实现。见Sam Tobin Hochstadt第10节“实施”
    (编辑以说明JIT实际上是评估的一部分,而不是单独的阶段。)