Haskell 非C++;用于生成式编程的语言?
C++可能是和最流行的语言Haskell 非C++;用于生成式编程的语言?,haskell,lisp,clojure,metaprogramming,boo,Haskell,Lisp,Clojure,Metaprogramming,Boo,C++可能是和最流行的语言 P>除了C++之外,还有其他支持生成程序的语言(创建程序的程序)吗?< /P> < P> LISP支持一种“元编程”的形式,尽管与C++模板元编程不一样。此外,术语“static”在此上下文中可能有不同的含义,但如果您的意思是静态类型的话,Lisp也支持静态类型。模板式元编程的替代方法是在各种Lisp实现中看到的宏式元编程。如果您对在JVM上运行的带有宏的Lisp感兴趣,我建议您下载并查看一下 Lisp中的宏比C/C++风格的宏功能强大得多,它们本身就构成了一种语言
<> P>除了C++之外,还有其他支持生成程序的语言(创建程序的程序)吗?< /P> < P> LISP支持一种“元编程”的形式,尽管与C++模板元编程不一样。此外,术语“static”在此上下文中可能有不同的含义,但如果您的意思是静态类型的话,Lisp也支持静态类型。模板式元编程的替代方法是在各种Lisp实现中看到的宏式元编程。如果您对在JVM上运行的带有宏的Lisp感兴趣,我建议您下载并查看一下 Lisp中的宏比C/C++风格的宏功能强大得多,它们本身就构成了一种语言——它们是用于元编程的。并且是我个人对这类东西的最爱。Nemerle有一个非常优雅的宏语法,尽管它的文档很差。Boo的文档非常优秀,但是它的宏有点不够优雅。然而,这两种方法都非常有效 这两种语言都以.NET为目标,因此它们可以轻松地与C#和其他.NET语言进行互操作——如果使用IKVM,甚至可以与Java二进制文件进行互操作 编辑:澄清一下,我指的是Lisp意义上的宏,而不是C的预处理器宏。这些允许在编译时定义新语法和大量元编程。例如,Nemerle附带的宏将在编译时根据SQL server验证SQL查询。我推荐。下面是一个描述其编译时元编程功能的示例。与C++类似,但具有更好的元编程支持。以下是仅使用编译时元编程编写的光线跟踪器示例: 此外,还有一个GCC分支,叫做“概念GCC”,它支持C++编程的元编程结构(至少还没有)。
对于这个特定的功能来说,“元编程”的确是一个坏名字,至少当您讨论多种语言时是这样,因为这个功能只适用于以下语言的一小部分:
- 静止的
- 编译成机器语言
- 针对编译时的性能进行了大量优化
- 可通过用户定义的数据类型扩展(C++中的OOP)
- 大受欢迎
当然,动态语言和几种函数式语言支持完全不同的概念,也可以称为元编程。当然,元语言(ML):模板元编程本质上是对模板机制的滥用。我的意思是,你从一个功能中得到的基本上是你所期望的,这是一个意外的副作用——它是一团乱,而且(尽管工具越来越好)是一个真正的麻烦,因为语言不支持你这么做(我应该指出,我在这方面的最新经验已经过时,因为我基本上放弃了这种方法。不过,我还没有听说有任何重大进展。) 大约在98年,我就开始寻找更好的解决方案。我可以根据它编写有用的系统,但它们都是地狱般的。四处摸索最终让我找到了Common Lisp。当然,模板机制是图灵完成的,但intercal也是如此 Common Lisp的元编程功能是“正确的”。在进行元编程时,您可以使用该语言的全部功能,无需特殊语法,而且由于该语言非常动态,您可以使用它做更多的事情
当然还有其他选择。我使用的元编程语言中没有任何一种语言比Lisp做得更好,这就是为什么我在研究代码时使用它。虽然有很多原因你可能想尝试其他东西,但这都是一种折衷。你可以看看Haskell/ML/OCaml等。很多函数式语言都有一些类似的东西利用Lisp宏的强大功能。你可以找到一些针对.NET的东西,但它们都非常边缘化(在用户基础等方面)工业用语言中没有一个大玩家真的有这样的功能。让我列出一些重要的细节关于元编程如何在lisp中工作(或者,或者,或者,选择你最喜欢的“动态”语言):
- 在lisp中进行元编程时,您不必处理两种语言。
// \ <module:hello>
#include <stdlib.h>
void main() {
}
// / <module:hello>