Lisp宏和Scala宏有什么区别?

时间:2019-04-19 23:09:28

标签: scala macros lisp scala-macros

Lisp宏和scala宏之间有根本区别吗?

可以这么说,我知道宏是对程序进行编程的手段。它们扩展了语言。但是它们同样强大吗?与Lisp宏相比,scala宏有一些限制吗?可以说lisp宏更强大吗?与Lisp宏相比,scala宏是否有某些适用性限制?

如果Lisp和scala宏之间没有概念上的区别,则可以只研究Lisp宏的机制,然后将其应用于scala。但是,如果Scala宏不像Lisp宏那么强大,那是不可能的。关于Lisp的文献很多,但是关于scala的文献很少。

1 个答案:

答案 0 :(得分:2)

Lisp是动态类型的语言。 Scala是静态类型的语言,其类型系统非常强大。

Scala中的宏可以根据AST的类型(或子树的类型)来转换AST,甚至可以更改其类型。因此,Scala中的宏不仅是语法上的,而且还是语义上的。

另请参见论文https://infoscience.epfl.ch/record/226166/files/EPFL_TH7159.pdf#chapter.10中关于Scala中的宏与Lisp中的宏的论述。 206。