我想知道 F# 中的非类型/类型代码引用与宏系统的卫生之间是否存在关系。他们是否用各自的语言解决相同的问题,或者它们是不同的关注点?
元编程方面是唯一的相似之处,即使在这方面,也存在很大的差异。您可以将宏的转换器视为从语法到语法的函数,就像您可以操作引号一样,但是转换器是全局协调的,因此用作绑定器的名称遵循特定的协议:
1) 活页夹可能与宏输入中的任何自由名称不同(除非您使用不卫生的逃生舱口)
2) 绑定在宏定义上下文中且在宏扩展中自由的名称必须在宏使用时指向相同的事物。 (这需要全球协调)
对名称进行选择,以便在使用错误名称时扩展不会失败(除非事实证明该名称未绑定)。
类型化引用的转换器没有这种定义时间上下文的想法。您操纵引号来形成一个不引用程序中任何名称的程序。它们并不是为了提供句法抽象机制。任意形状的语法?没有。这一切都必须是核心 AST 形状。
类型化报价系统中的开放代码可以用任何符合预期上下文类型结构的东西来封闭——没有将多个开放组件协调组合成一个连贯的结构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)