我一直在阅读有关 F# 3.0 类型提供程序的内容(例如here http://msdn.microsoft.com/en-us/library/hh156509.aspx)并且它们似乎基于一种编译时代码生成。在这方面我想知道它们与 Lisp 宏相比如何。看起来 F# 3.0 类型提供程序和 Lisp 宏都允许用户代码在编译时执行并引入可供编译器使用的新类型。任何人都可以阐明这个问题和所涉及的细微差别吗?
F# 类型提供程序和其他语言的元编程技术之间存在一些重叠,但我同意 Daniel 的观点,即它们没有太多共同点。 F# 还有一些其他元编程技术,例如可能更接近 LISP 宏的引用。
尤其:
LISP 宏通常用于转换表达式(您可以采用 LISP 表达式并解释它或转换它,然后执行它)。请注意,转换采用 LISP 表达式作为输入 - 另一方面,类型提供程序只能采用非常有限的参数(字符串、整数)。
引文更相似。它们可用于处理 F# 表达式 - 您可以将一段 F# 代码视为数据并对其进行解释或转换。该转换采用 F# 表达式(的子集),但通常不会执行它。
类型提供程序纯粹用于生成types。由于 LISP 是动态类型的,因此这实际上并不是 LISP 中的问题。然而,它是一种代码生成(您当然可以在 LISP 中进行的一种元编程形式)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)