2010-05-21 121 views
13

您认为学习和使用元编程最适合的语言(就简单性,可读性和代码优化而言)是什么?要学习元编程的语言

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

+4

您可能想将此作为一个社区wiki问题,以避免在主观和论证基础上关闭。 – 2010-05-21 13:01:41

+1

现在是社区wiki。 – Erup 2010-05-21 13:24:12

+2

+1好问题。真正的耻辱是关闭的,因为关于这个问题有很多话要说。 Lisp(1960)是所有元编程语言的母亲。 Scheme是一个易于学习的Lisp。 MetaLanguage(ML,1970s)系列语言是专门为元程序设计和现代衍生产品(OCaml,Haskell,F#)设计的。查看一些语言,让您可以定位像.NET这样的虚拟机,同时也可以使用LLVM。正则表达式是元编程有用性的一个引人注目的实例。 – 2012-02-22 09:19:24

回答

2

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

+4

Ruby一直被誉为元语言,但它没有一个结构良好的元编程框架 - 它只是使用它的动态特性,如Python。恕我直言,学习元编程值得重新审视元类和自反语言,即使惯例是使用基于散列的动态语言。 – 2010-05-21 15:17:41

0

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

欢呼声, 阿希姆

4

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

请参阅this answer其中列出了各种概念和相关语言。这是一个总结:

  • 元编程与宏 - > Lisp的
  • 元编程与DSL - >内部DSL许多语言,外部DSL更棘手
  • 反思 - > Smalltalk中,红宝石
  • 注释 - > Java的
  • 字节码或AST转换 - > Groovy的

详情参见完整的答案。一般来说,我认为一个好的OO全才是Ruby。否则,任何类似Lisp的人都可以完成这项工作:它就像手中的油灰一样。但这将取决于你想要做什么...

+0

关于企业应用程序和概念的思考,不仅仅是一种技术,而是元编程所能做的一切。我的意思是,使用一个容易的工作和学习技术。 Ruby认为是一个不错的选择。 – Erup 2010-05-21 13:31:29

+0

正如@Jay所列,在我看来,语法元编程技术在企业环境中表现得更好。在运行时操作并不合适,有时(比如Ruby?)。 – Erup 2010-05-21 16:01:53

5

Lisps几乎是各种元编程技术的选择语言。在可用的现代Lisp中,如果您希望立即使用强大的,我会推荐Clojure作为更易于访问的Lisp,它可以访问积极的HUGE库(Java领域中的任何内容)。

对于其他元编程方法,几乎​​所有的函数式语言都可以做到。 Haskell对于学习技巧和函数式编程是一个很好的选择,但这不是我称之为现实中最实用的语言。 Erlang更实用,但不太适合元编程。 OCaml是另一种可能的选择,但在实用性方面也存在一些问题。然而,在许多方面它比Haskell更容易获得。

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

2

有几种语言我会推荐学习元编程。

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

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

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

8

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

无论如何... 我可以想到两种不同的元编程方法:在syntatic级别和运行时。

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

因此 - Scheme中有几种不同的元编程方法(不同的宏系统)。我建议你看看一些基本的计划书,后来阅读两个不同的宏观系统。

一些很好的计划书:

Scheme实现彼此非常不同的,所以你还可以使用你的计划实施手册一很多。

学习计划宏一些地方:

如果你决定使用这比计划更大混乱语言,尝试的Common Lisp 。有三本书我会建议:

  • 首先,“Practical Common Lisp”通过Peter seibel。这会让你开始使用Common Lisp和宏;
  • 二,Paul Graham的“On Lisp”。然后你会知道宏比以前想象的更强大,并且会学到非常好的技巧;
  • 三,Doug Hoyte的“Let Over Lambda”。一本先进的书,最好在Graham的On Lisp之后阅读。

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

有很多很好的Smalltalk书籍。我喜欢Simon Lewis的“Smalltalk的艺术和科学”。 关于Smalltalk,还有一个非常不错的free tutorial/primer by Canol Gokel(但它不像教授元编程)。

+1

我喜欢你讲述这个话题的方式。另外,考虑企业应用和一系列概念,实现和可维护性(在一个团队中工作),我知道语法元编程技术(如您所描述的)比运行时更好。 – Erup 2010-05-21 14:09:21

+1

@Erup:不要用你的团队现在使用的语言来学习概念。学习概念,学习概念,使用任何工具帮助最好,然后选择你的语言,一旦你了解这个概念。例如,你可以用C++进行元编程,如果你对模板非常熟悉,但通过C++进行LEARNING元编程将是非常重要的。 – 2010-05-21 14:37:02

+0

谢谢@JUST我正确的意见,学习的概念是我想要的。当我说“在团队中工作”时,我的意思是使用易于使用的技术。所有的团队都必须学习! – Erup 2010-05-21 14:49:20

2

我很惊讶没有人提到ML。 ML代表元语言。所以...是的... CaML是一个标准的实现。 (OCAML,其中提到的只是我的正确OPINIO是CAML的OO版本,这可能增加了功能,使元编程不太明显...)

除此之外,我计划的大风扇,但相当许多函数式编程语言对此都有好处...总是有Little Lisper,呃,对不起,Little Schemer ...

+2

在OCaml中编程的人倾向于真的非常迅速地丢弃O部分,只留下Caml。我不认为任何严重的OCaml程序员都会以任何频率使用它的面向对象部分。 – 2010-05-21 14:38:57