回答
Ruby具有非常强大和灵活的元编程功能。
Ruby一直被誉为元语言,但它没有一个结构良好的元编程框架 - 它只是使用它的动态特性,如Python。恕我直言,学习元编程值得重新审视元类和自反语言,即使惯例是使用基于散列的动态语言。 – 2010-05-21 15:17:41
不知道我们是否具有“元编程”的相同定义,但肯定没有最好的语言学习。我会建议你深入研究函数式编程。选择哪种语言取决于您的背景和工作环境。我现在会选择F#,但Haskel也应该是一个不错的选择。
欢呼声, 阿希姆
你说的元编程是什么意思?元编程是一组概念,而不是一种特定的技术。
请参阅this answer其中列出了各种概念和相关语言。这是一个总结:
- 元编程与宏 - > Lisp的
- 元编程与DSL - >内部DSL许多语言,外部DSL更棘手
- 反思 - > Smalltalk中,红宝石
- 注释 - > Java的
- 字节码或AST转换 - > Groovy的
详情参见完整的答案。一般来说,我认为一个好的OO全才是Ruby。否则,任何类似Lisp的人都可以完成这项工作:它就像手中的油灰一样。但这将取决于你想要做什么...
Lisps几乎是各种元编程技术的选择语言。在可用的现代Lisp中,如果您希望立即使用强大的和,我会推荐Clojure作为更易于访问的Lisp,它可以访问积极的HUGE库(Java领域中的任何内容)。
对于其他元编程方法,几乎所有的函数式语言都可以做到。 Haskell对于学习技巧和函数式编程是一个很好的选择,但这不是我称之为现实中最实用的语言。 Erlang更实用,但不太适合元编程。 OCaml是另一种可能的选择,但在实用性方面也存在一些问题。然而,在许多方面它比Haskell更容易获得。
在脚本语言世界Ruby是一种语言,其中元编程是一种流行的技术。它的方法有点类似于Lisp,但具有更传统的语法。但是,它缺乏Lisps的全部功能和灵活性,但另一方面,除了上面的Clojure之外,它具有更直接的实用性。
有几种语言我会推荐学习元编程。
第一个是Prolog。 Prolog程序是一个数据库。 Prolog“代码”,这些条款是数据的一部分。该程序可以读取它们,包括它们的内容。它也可以生成新的代码作为数据结构并进行声明,从而在运行时自行更改。所有这些都没有使用术语扩展,这是Prolog的智能宏系统。一些Prolog AI书籍首先在Prolog中实现一个元解释器,然后根据需要进行更改。
第二个是,如上所述,Lisp,特别是CLOS(公共列表对象系统),它包括meta-OOP的命令。
最后,Python支持运行时元编程,它是元类(创建类的类)的运行时元编程一个很好的,而不是太晦涩的机制。
首先 - 我不认为我同意你的说法,即“元编程是编码的未来”。这是一个很棒的工具,但并不是每个人都喜欢它(例如,Java设计人员故意将宏从语言中移出 - 并不是我喜欢Java,但人们有理由反对元编程)。
无论如何... 我可以想到两种不同的元编程方法:在syntatic级别和运行时。
对于语法元编程,我认为Scheme是一个很好的选择(如果你没有提到简单等我建议使用Common Lisp)。 对于运行时间元编程,我猜测Prolog和Smalltalk都是非常有趣的。 (您可以即时添加,更改和删除事实到Prolog数据库;并且您可以随时更改Smalltalk对象)。你也可以在Ruby中进行运行时元编程,但我不知道Ruby。
因此 - Scheme中有几种不同的元编程方法(不同的宏系统)。我建议你看看一些基本的计划书,后来阅读两个不同的宏观系统。
一些很好的计划书:
Scheme实现彼此非常不同的,所以你还可以使用你的计划实施手册一很多。
学习计划宏一些地方:
- http://www.lispforum.com/viewtopic.php?f=22&t=100
- http://www.ibm.com/developerworks/linux/library/l-metaprog2.html
- http://chicken.wiki.br/explicit-renaming-macros
如果你决定使用这比计划更大混乱语言,尝试的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(但它不像教授元编程)。
我喜欢你讲述这个话题的方式。另外,考虑企业应用和一系列概念,实现和可维护性(在一个团队中工作),我知道语法元编程技术(如您所描述的)比运行时更好。 – Erup 2010-05-21 14:09:21
@Erup:不要用你的团队现在使用的语言来学习概念。学习概念,学习概念,使用任何工具帮助最好,然后选择你的语言,一旦你了解这个概念。例如,你可以用C++进行元编程,如果你对模板非常熟悉,但通过C++进行LEARNING元编程将是非常重要的。 – 2010-05-21 14:37:02
谢谢@JUST我正确的意见,学习的概念是我想要的。当我说“在团队中工作”时,我的意思是使用易于使用的技术。所有的团队都必须学习! – Erup 2010-05-21 14:49:20
我很惊讶没有人提到ML。 ML代表元语言。所以...是的... CaML是一个标准的实现。 (OCAML,其中提到的只是我的正确OPINIO是CAML的OO版本,这可能增加了功能,使元编程不太明显...)
除此之外,我计划的大风扇,但相当许多函数式编程语言对此都有好处...总是有Little Lisper,呃,对不起,Little Schemer ...
在OCaml中编程的人倾向于真的非常迅速地丢弃O部分,只留下Caml。我不认为任何严重的OCaml程序员都会以任何频率使用它的面向对象部分。 – 2010-05-21 14:38:57
- 1. 学习编程语言
- 2. 需要学习哪种汇编语言
- 3. 学习正确的编程语言?
- 4. 什么是学习机器学习的最佳编程语言?
- 5. 学习编程语言概念
- 6. 学习HTML和学习编程语言有什么区别?
- 7. 逆向工程编程语言或'无监督学习语言'
- 8. 我是否需要学习更多的编程语言?
- 9. 学习C++语言
- 10. 学习汇编语言是否值得?
- 11. 学习Ontology网络语言
- 12. 学习x86汇编语言。需要一些说明
- 13. 学习新语言时要做的资源/练习
- 14. 理想的学习新编程语言的方式
- 15. 数学编程语言
- 16. 希望学习一门新的编程语言
- 17. 学习编程语言的工作方式
- 18. 正在学习很多不同的编程语言吗?
- 19. 寻找低级编程语言的学习材料
- 20. 学习如何在没有语言的情况下编程?
- 21. 想要学习一门用于移动开发的新编程语言
- 22. 从哪里开始想要学习特定项目的编程语言?
- 23. 您是否需要学习语言以学习SQL以外的Tableau?
- 24. 学习函数式编程语言有多困难?
- 25. Io框架开始学习Io(编程语言)
- 26. 如何将R学习为编程语言?
- 27. 学习汇编语言如何帮助我调试C程序?
- 28. 学习斯威夫特第一个编程语言
- 29. 深度学习DJI Mavic Pro和指导SDK编程语言
- 30. 语言学习语音识别工具
您可能想将此作为一个社区wiki问题,以避免在主观和论证基础上关闭。 – 2010-05-21 13:01:41
现在是社区wiki。 – Erup 2010-05-21 13:24:12
+1好问题。真正的耻辱是关闭的,因为关于这个问题有很多话要说。 Lisp(1960)是所有元编程语言的母亲。 Scheme是一个易于学习的Lisp。 MetaLanguage(ML,1970s)系列语言是专门为元程序设计和现代衍生产品(OCaml,Haskell,F#)设计的。查看一些语言,让您可以定位像.NET这样的虚拟机,同时也可以使用LLVM。正则表达式是元编程有用性的一个引人注目的实例。 – 2012-02-22 09:19:24