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