Lou*_*nco 32
模板样式元编程的替代方法是在各种Lisp实现中看到的宏样式.我建议下载Paul Graham的On Lisp,如果你对使用在JVM上运行的宏的Lisp感兴趣,还可以看一下Clojure.
Lisp中的宏比C/C++风格强大得多,并且本身构成了一种语言 - 它们用于元编程.
Att*_*vai 24
让我列出一些关于元编程如何在lisp(或方案,或平板,或选择你最喜欢的"动态"语言)中工作的重要细节:
使用lisp元编程实现用户库的随机示例(这些是常见的lisp库的实际示例):
sim*_*mon 13
模板元编程实质上是滥用模板机制.我的意思是你基本上得到了你所期望的功能,这是一个无计划的副作用 - 它是一团糟,并且(尽管工具越来越好)是一个真正的痛苦,因为语言没有支持你这样做(我应该注意到,我对这方面的最新经验是过时的,因为我基本上放弃了这种方法.但我没有听说过任何重大进展)
在大约98年左右解决这个问题是驱使我寻找更好解决方案的原因.我可以编写依赖它的有用系统,但它们是地狱般的.四处寻找最终导致我成为Common Lisp.当然,模板机制是Turing完成,但是同样是intercal.
Common Lisp做元编程"正确".你可以使用该语言的全部功能,没有特殊的语法,并且因为语言非常动态,你可以用它做更多的事情.
当然还有其他选择.没有其他语言我使用的元编程比Lisp更好,这就是我将它用于研究代码的原因.你可能想要尝试别的东西有很多原因,但这些都是权衡取舍.您可以查看Haskell/ML/OCaml等.许多函数式语言都具有接近Lisp宏的强大功能.你可以找到一些.NET目标的东西,但它们都非常边缘(在用户群等方面).在工业上使用的语言中,没有一个大玩家真的有这样的东西.
Nim是一种相对较新的编程语言,它对静态元编程有广泛的支持,并产生高效的(类似C++)编译代码.
它支持编译时功能评估,通过宏进行类似lisp的AST代码转换,编译时反射,可以使用任意值进行参数化的泛型类型,以及可用于创建用户定义的高级类型感知的术语重写窥视孔优化.甚至可以在编译过程中执行可能影响代码生成的外部程序.例如,考虑与本地运行的数据库服务器通信,以验证代码中的ORM定义(通过某些DSL提供)是否与数据库的模式匹配.
Common Lisp支持以多种不同方式编写程序的程序.
1)程序数据和程序"抽象语法树"是统一的(S表达式!)
2) defmacro
3)读者宏.
4)MOP
其中,真正令人兴奋的是MOP.阅读"元对象协议的艺术".我保证,这会改变你的想法!