Scala Macro Paradise适用于 2.11 和 2.10 。对于 2.10,它说
您已经可以在 2.10.x 的生产版本中使用准引号
这是否意味着2.10天堂是2.11版本的子集?例如,我可以使用 Scala 2.10 来试验类型宏,还是我需要使用 2.11 来实现这个功能?
Scala Macro Paradise适用于 2.11 和 2.10 。对于 2.10,它说
您已经可以在 2.10.x 的生产版本中使用准引号
这是否意味着2.10天堂是2.11版本的子集?例如,我可以使用 Scala 2.10 来试验类型宏,还是我需要使用 2.11 来实现这个功能?
我的理解是,您只能访问准报价。您使用这个特殊的 2.10 版本的宏天堂编译您的宏,然后可以在针对(正常,非宏天堂)scala 2.10 编译的代码中使用它们。这是可能的,因为在编译宏本身时使用了准引用,并扩展为正常的宏代码,它不使用 Scala 2.10 中已经可用的 API(显式地创建树,逐个节点)。所以你可以在 Scala 2.10 代码中使用这些宏,编译器不会看到差异。
另一方面,类型宏不能使用这个技巧,因为它们在 scala 2.10 中根本不可用。在编译时生成类型不是 scala 2.10 编译器知道如何做的事情,因此您肯定需要使用 2.11 编译器编译您的客户端代码(您的实际代码,而不仅仅是宏代码)。
宏天堂最近被改造成一个编译器插件。它包括对准引号(与 2.11 兼容的源代码)和宏注释的大大改进的支持。类型宏和无类型宏已停止使用(支持宏注释。)
由于二进制兼容性限制,Paradise 2.10.x 仅包含准引号。顺便说一句,感谢您提出的出色问题。我在这里更新了指南。