学习元编程的语言

时间:2010-05-21 12:57:25

标签: programming-languages metaprogramming

在您看来,学习和使用元编程的最佳语言(在简单性,可读性和代码优势方面)是什么?

我认为元编程是“编码的未来”。不是说代码会灭绝,但我们可以看到这种情况会出现在新技术上。

7 个答案:

答案 0 :(得分:8)

首先 - 我认为我不同意你的观点,即“元编程是'编码的未来'”。它是一个很棒的工具,但不是每个人都喜欢它(例如,Java设计者故意将宏从语言中删除 - 不是我喜欢Java,而是人们有理由反对元编程)。

总之... 我可以想到两种不同的元编程方式:在合成级别和运行时。

对于语法元编程,我认为Scheme是一个很好的选择(如果你没有提到简单性等我建议使用Common Lisp)。 对于运行时元编程,我猜Prolog和Smalltalk都非常非常有趣。 (您可以动态添加,更改和删除事实到Prolog数据库;您可以动态更改Smalltalk对象)。您也可以在Ruby中执行运行时元编程,但我不了解Ruby。

所以 - Scheme中有几种不同的元编程方法(不同的宏系统)。我建议你看看一些基本的方案书,然后阅读两个不同的宏系统。

一些好的计划书:

方案实现彼此非常不同,因此您也将使用您的Scheme实施手册。

有些地方需要了解Scheme宏:

如果您决定使用比Scheme更大且更混乱的语言,请尝试使用Common Lisp。我建议有三本书:

  • 首先,彼得塞贝尔的“Practical Common Lisp”。这将使您开始使用Common Lisp和宏;
  • 第二,保罗格雷厄姆的“On Lisp”。然后,您将了解到宏比您之前想象的更强大,并且将学习非常好的技术;
  • 第三,Doug Hoyte的“Let Over Lambda”。一本高级的书,最好在Graham的On Lisp之后阅读。

对于Prolog,您可以阅读Clocksin和Mellish的“Prolog编程”(获取最新版本!),然后转到Covington,Vellino和Nute的“Prolog Programing in Depth”。见第6章。

有许多好的Smalltalk书籍。我喜欢Simon Lewis的“The Small and Science of Smalltalk”。 关于Smalltalk也有一个非常好的free tutorial/primer by Canol Gokel(但它并不像教授元编程那样)。

答案 1 :(得分:5)

元编程是什么意思?元编程是一组概念,而不是一种特定的技术。

请参阅this answer,其中列出了各种概念和相关语言。以下是摘要:

  • 用宏进行元编程 - >口齿不清
  • 使用DSL进行元编程 - >内部DSL,外部DSL的许多语言都比较棘手
  • 反思 - > Smalltalk,Ruby
  • 注释 - >爪哇
  • 字节码或AST转换 - > Groovy

有关详细信息,请参阅完整答案。一般来说,我认为一个优秀的OO全能者是Ruby。否则任何类似Lisp的东西都会起作用:它就像腻子在你手中。但这取决于你想做什么......

答案 2 :(得分:5)

Lisps几乎是各种元编程技术的首选语言。在现有的Lisps中,我建议Clojure作为一个更容易访问的Lisp,如果你想要一个强大的的东西,它可以访问一个积极的巨大的库(Java领域的任何东西)是有用的。

对于元编程的其他方法,几乎​​任何函数式语言都可以解决问题。 Haskell是学习技巧和函数式编程的不错选择,但不是我现在称之为实际工作的最实用的语言。 Erlang更实用,但不太适合元编程。 OCaml是另一种可能的选择,但在实用性方面也有一点不足。然而,在许多方面它比Haskell更容易获得。

在脚本语言世界Ruby是一种语言,其中元编程是一种流行的技术。它的方法模糊地类似于Lisp,但具有更传统的语法。然而,它缺乏Lisp的全部功能和灵活性,但另一方面,除了上面的Clojure之外,它还具有更直接的实用性。

答案 3 :(得分:2)

Ruby具有非常强大和灵活的元编程功能。

答案 4 :(得分:2)

我建议使用多种语言来学习元编程。

第一个是 Prolog 。 Prolog程序是一个数据库。 Prolog“代码”这些条款是数据的一部分。该程序可以读取它们,包括它们的内容。它还可以生成新代码作为数据结构并对其进行断言,从而在运行时自行更改。所有这一切都没有使用术语扩展,这是Prolog的智能宏系统。一些Prolog AI书开始在Prolog中实现元解释器,然后根据需要进行更改。

如上所述,第二个是 Lisp ,特别是包含meta-OOP命令的CLOS(公共列表对象系统)。

最后, Python 支持运行时元编程的一个很好的而不是太模糊的机制,它是元类(创建类的类)。

答案 5 :(得分:2)

我很惊讶没人提到ML。 ML代表Meta语言。所以...是的...... CaML是一个标准的实现。 (OCaML,我刚才提到的正确的OPINIO是CaML的OO版本,它可能增加了使元编程不那么明显的功能......)

除此之外,我是Scheme的忠实粉丝,但几乎任何函数式编程语言都对此有好处......总是有小Lisper,呃,对不起,Little Schemer ......

答案 6 :(得分:0)

不知道我们是否对“元编程”有相同的定义,但肯定没有一种最好的语言可供学习。我建议您深入了解函数式编程。选择哪种语言取决于您的背景和工作环境。我现在会选择F#,但Haskel也应该是个不错的选择。

欢呼声, Achim的