gpt4 book ai didi

macros - 什么时候进行宏扩展?

转载 作者:行者123 更新时间:2023-12-04 23:22:06 24 4
gpt4 key购买 nike

我正在学习 macros in Racket (Scheme 的语言继承者)。没有提到何时执行宏扩展。在 this 的第 17 页上我发现有一段文字说它发生在类型检查、评估和编译之前。

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

最佳答案

虽然 Racket 专家可能会纠正我,但我的理解是主要阶段是:

  • A 读取通行证将输入字符处理为语法对象。
  • 扩展 pass 递归扩展语法对象,包括使用用户定义的宏。
  • 评价 . (JIT 编译发生在求值期间,每当调用尚未编译的函数时。)

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

    有关极端详细信息,请参阅 Language Model包括例如 Syntax Model部分。

    你提到了“类型检查”。
  • 普通 Racket (例如 #lang racket )是动态类型的,并在运行时进行检查。
  • Typed Racket(例如 #lang typed/racket )在扩展期间进行静态类型检查:Typed Racket 系统是通过宏实现的。参见 Sam Tobin-Hochstadt 的 dissertation 的第 10 节“实现” .

  • (编辑注意到 JIT 实际上是评估的一部分,而不是一个单独的阶段。)

    关于macros - 什么时候进行宏扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21400519/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com