Lisp 宏和 Scala 宏有什么区别?
What is the difference between Lisp macros and scala macros?
Lisp 宏和 scala 宏之间有什么根本区别吗?
我知道宏是编写程序的手段,可以这么说。他们扩展了语言。但它们是否同样强大?与 Lisp 宏相比,scala 宏有一些限制吗?说lisp宏更强大合适吗?与 Lisp 宏相比,scala 宏是否有一些适用性限制?
如果Lisp和scala的宏在概念上没有区别,那么可以只研究Lisp宏的机制,然后直接应用于scala。但是,如果 scala 宏不如 Lisp 宏那么强大,那么这是不可能的。有很多关于 Lisp 的优秀文献,但关于 scala 的文献却很少。
Lisp 是动态类型语言。 Scala 是静态类型语言,它的类型系统非常强大。
Scala 中的宏可以根据其类型(或其子树的类型)转换 AST,甚至可以更改其类型。所以 Scala 中的宏不仅是语法上的,而且是语义上的。
另请参阅论文 https://infoscience.epfl.ch/record/226166/files/EPFL_TH7159.pdf#chapter.10 中关于 Scala 中的宏与 Lisp 中的宏的评论,p. 206.
Lisp 宏和 scala 宏之间有什么根本区别吗?
我知道宏是编写程序的手段,可以这么说。他们扩展了语言。但它们是否同样强大?与 Lisp 宏相比,scala 宏有一些限制吗?说lisp宏更强大合适吗?与 Lisp 宏相比,scala 宏是否有一些适用性限制?
如果Lisp和scala的宏在概念上没有区别,那么可以只研究Lisp宏的机制,然后直接应用于scala。但是,如果 scala 宏不如 Lisp 宏那么强大,那么这是不可能的。有很多关于 Lisp 的优秀文献,但关于 scala 的文献却很少。
Lisp 是动态类型语言。 Scala 是静态类型语言,它的类型系统非常强大。
Scala 中的宏可以根据其类型(或其子树的类型)转换 AST,甚至可以更改其类型。所以 Scala 中的宏不仅是语法上的,而且是语义上的。
另请参阅论文 https://infoscience.epfl.ch/record/226166/files/EPFL_TH7159.pdf#chapter.10 中关于 Scala 中的宏与 Lisp 中的宏的评论,p. 206.