蟒与红宝石元编程[关闭](Python vs. Ruby for metaprogramming [

2019-08-07 20:51发布

我目前主要是d程序员,我期待到另一种语言添加到我的工具箱中,最好是支持,只是不能像D.静态编译语言来完成的元编程黑客

我读过了Lisp上一点,我很想找到一种语言,它允许一些是Lisp的做很酷的东西,但没有奇怪的语法等的Lisp的。 我不想开始语言火焰战争,我敢肯定,这两个Ruby和Python有他们的权衡,所以我将列出什么对我个人是非常重要的。 请告诉我是否拼音,Python或其他语言将是最适合我的。

重要:

  1. 良好的元编程。 有创业能力,运行时创建类,方法,函数等。 优选地,代码和数据,Lisp的样式之间存在最小的区别。
  2. 尼斯,清洁,理智的语法和一致的,直观的语义。 基本上是一个深思熟虑的,有趣的使用,现代的语言。
  3. 多范式。 没有一个模式是适合每一个项目,或者项目中甚至每一个小的子问题。
  4. 一个有趣的语言,实际上影响人认为对编程的想法。

有一些重要:

  1. 性能。 这将是很好,如果表现不错,但在性能才是真正的重点,我会用d代替。
  2. 充分证明。

不重要:

  1. 这些社区的规模,图书馆可用性等等都不是语言本身的特点,都可以非常迅速地改变。
  2. 作业的可用性。 我不是专职,专业程序员。 我是一个毕业的学生和编程是我的研究相切相关的。
  3. 这主要是设计有非常大的项目任何功能心中一百万代码猴子工作的。

Answer 1:

有没有真正至少在意识形态层面Python和Ruby之间的巨大差异。 在大多数情况下,它们是同一事物的只是不同的口味。 因此,我建议这一个你的编程风格的匹配更明的。



Answer 2:

我读过了Lisp上一点,我很想找到一种语言,它允许一些是Lisp的做很酷的东西,但没有奇怪的语法等的Lisp的。

那岂不是所有的。

代码和数据,Lisp语言风格之间的区别很小

可悲的是,代码和数据以及“奇怪”的语法之间的最小区别彼此的后果。

如果你想轻松阅读的语法,你有Python的。 但是,代码不是在任何通常使用的内置的数据结构的表示。 它失败,因为大多数语言一样,在项目#你的“重要”名单1。 这使得它很难提供有益的帮助。

你不能拥有一切。 记住,你是不是第一次有这样的想法。 如果像你的理想语言的存在,我们就都可以使用它。 由于现实世界中没有达到你的理想,你就必须重新优先考虑你的愿望清单。 “重要”部分已被重新排列,以确定什么对你真的很重要。



Answer 3:

老实说,尽可能的元编程工具去,Ruby和Python有很多比他们的一些附着愿意承认的更相似。 这两个语言的这次审查提供了一个相当不错的比较/点评:

  • http://regebro.wordpress.com/2009/07/12/python-vs-ruby/

所以,随便挑基于一些标准之一。 也许你喜欢Rails和想要学习的代码。 也许SciPy的是你的事。 看看图书馆,社区等的生态系统,并挑选一个。 你肯定不会失去了根据您选择的任何一些元编程佳境。



Answer 4:

免责声明:我只涉足任何一种语言,但我至少写小的工作程序(不只是快速的脚本,为此,我用Perl,bash或GNU使)在这两个。

红宝石可以是非常好的,为“多范式”第3点,因为它努力工作,可以很容易地创建领域特定语言。 例如,在线浏览,看看在Rails代码一对夫妇红宝石位,和一对夫妇的耙码位。 他们都是红宝石,你可以看到相似之处,但他们不喜欢看什么你通常认为的同一种语言。

蟒蛇在我看来,更可预测的一点(可能是相关的“干净”和“理智” 2点),但我真的不知道这是否是因为语言本身或只是它通常使用的人用不同的值。 我从来没有在Python试图魔渊。 我肯定会说两种语言都是经过深思熟虑的。

在1和4 [编辑两个高分:其实1是很值得商榷的 - 有“EVAL”在这两个,在解释型语言一样普遍,但他们几乎没有概念纯净。 您可以定义关闭,分配方法,对象,以及诸如此类的东西。 不知道这是否竟把你想要的。]

我个人觉得Ruby的更多的乐趣,但部分是因为它最容易被接受的很酷的方式做事情分心思考。 其实我已经用Python的。 有时候你不想冷静,你想的那么它的睡前做得到它...

他们都不是很难进入,所以你可以只决定做你的下一个次要的任务之一,而在其他的再下一个。 或拿起入门书上的每个从图书馆,脱脂阅读他们两个,看看抓住你。



Answer 5:

您是否考虑过Smalltalk中? 它提供了与反射率和自省能力和完全集成的开发环境,它利用这些功能优势,一个非常简单的,明确的和可扩展的语法。 看看一些工作正在进行中佳乐的Smalltalk的实例。 很多使用佳乐挂出科研人员的佳乐邮件列表和#squeak freenode上,这样你就可以得到复杂问题的帮助非常容易。

其目前相关的其他指标:它运行你照顾名称的任何平台(包括在iPhone ); 吉拉德·布拉彻是立足于佳乐他的新语工作; 在V8团队削减他们的牙齿上的Smalltalk的虚拟机 ; 和丹英格尔斯和兰德尔·施瓦茨最近回到Smalltalk的工作,经过多年在旷野。

祝您好运与您的搜索 - 让我们知道你到底决定什么。



Answer 6:

Lisp的满足你所有标准,包括性能,并且它是没有(怪)语法的唯一语言。 如果你避开它这样的惊人消息不灵通/执迷不悟的基础上,并因此错过了例如使用Emacs的+泥+ CL的经验,你会做自己一个伟大帮倒忙。



Answer 7:

你4“重要的”点导致红宝石准确,而2“有点重要”点被Python统治。 就这样吧。



Answer 8:

你所描述的红宝石。

  • 良好的元编程。 有创业能力,运行时创建类,方法,函数等。 优选地,代码和数据,Lisp的样式之间存在最小的区别。

这很容易扩展在运行时修改现有的原语。 在红宝石一切都是对象,字符串,整数,甚至功能。

您也可以建立快捷方式语法糖,例如用class_eval 。

  • 尼斯,清洁,理智的语法和一致的,直观的语义。 基本上是一个深思熟虑的,有趣的使用,现代的语言。

红宝石遵循少惊喜的原则 ,并VS在其他语言中的等价比较Ruby代码时,很多人认为它更“美丽”。

  • 多范式。 没有一个模式是适合每一个项目,或者项目中甚至每一个小的子问题。

您可以按照势在必行,面向对象,功能和反射。

  • 一个有趣的语言,实际上影响人认为对编程的想法。

这是很主观的,但是从我的角度来看,同时使用许多范式的能力允许非常有趣的想法。

我试着Python和它不适合你的要点。



Answer 9:

比较示例代码做同样的事(从项目的新行非空描述加入myList以不同的语言列表)(语言被安排在反向字母顺序):

红宝石

myList.collect { |f| f.description }.select { |d| d != "" }.join("\n")

要么

myList.map(&:description).reject(&:empty?).join("\n")

Python的

descriptions = (f.description() for f in mylist)
"\n".join(filter(len, descriptions)) 

要么

"\n".join(f.description() for f in mylist if f.description())

Perl的

join "\n", grep { $_ } map { $_->description } @myList;

要么

join "\n", grep /./, map { $_->description } @myList;

使用Javascript:

myList.map(function(e) e.description())
      .filter(function(e) e).join("\n")

我:

myList collect(description) select(!="") join("\n")

这里有一个木卫一指南 。



Answer 10:

红宝石会比Lisp中更好地被“主流”的条款(不管它的真正含义,但一个现实的问题是这将是多么容易找到问题的答案在Lisp程序,如果你去这一点。)在任何情况下, ,我发现红宝石非常容易上手。 在我第一次花了学习的Python(或其他语言为此事)的时间是相同的,我很快就被更有效地比我以前有写更好的代码。 这只是一个人的意见,虽然, 把它与盐粮,我猜。 我知道,在这一点上更多关于Ruby的比我做的Python或Lisp的,但你应该知道,我是一个Python的人相当长一段时间,我切换了。

Lisp中绝对是相当冷静,值得探讨; 正如你所说的,社区的大小等可以很快改变。 话虽这么说,规模本身不作为社区的质量一样重要。 例如, #ruby-lang渠道仍然是充满了一些非常聪明的人。 Lisp语言似乎吸引了一些非常聪明的人太多。 我不能说太多关于Python社区,因为我没有很多的第一手经验,但它似乎是“太大”的时候。 (我记得是人们对他们的IRC频道非常粗鲁的行为,并从我朋友那真的是成Python听到了,这似乎是惯例而非例外。)

无论如何,一些你可能会发现有用的资源有:

1)和Pragmatic Programmers Ruby的元编程系列( http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming ) -不是免费的,但后来的情节都相当耐人寻味。 (该代码是免费的,如果你想下载一下,看看你会学习。)

2)论保罗·格雷厄姆的Lisp( http://www.paulgraham.com/onlisp.html )。 这是一个有点老,但它是一个典型的(并且可以免费下载)。



Answer 11:

我使用Python的许多项目,我认为Python并提供所有您需要的功能。

重要:

  1. 元编程:Python支持元类和运行时类/方法产生等
  2. 语法:嗯那莫名其妙的主观。 我喜欢它的简单蟒蛇语法,但有些人抱怨说,Python是空白敏感。
  3. 范式:Python支持程序,面向对象的和碱性官能编程。
  4. 我认为Python有一个非常实用的风格为主,对我来说是非常鼓舞人心的。

有一些重要:

  1. 性能:那么它的脚本语言。 但是,编写C扩展Python是一种常见的优化实践。
  2. 文档:我不能抱怨。 它不是那么详细,有人可能会从Java知道,但它的不够好。

当你正在读研究生,你可能需要阅读本文声称Python是所有科学家的需求 。 不幸的是我不能比较的Python和Ruby,因为我从来没有使用过这种语言。

此致,丹尼斯



Answer 12:

@Jason我不同意分别。 它们的区别是使得Ruby优于Python的元编程 - 无论是哲学和务实。 对于初学者来说, 红宝石得到继承与单继承和混入的权利 。 而且,当涉及到元编程,你只需要明白,这是所有关于自我 。 这里的规范不同的是,在Ruby中,你必须在运行时访问对象-在Python你不知道!

不像Python和Ruby中没有单独的编译或运行时阶段。 在Ruby中,每一行代码是根据特定的对象执行。 在Ruby中每一个类从两个对象和隐藏的元类继承。 这使得一些有趣的动态:

class Ninja
  def rank
    puts "Orange Clan"
  end

  self.name #=> "Ninja"
end

使用self.name存取忍者类的元类的名称方法返回忍者的类名。 元编程是否花这么漂亮的Python? 我真诚地相信它!



Answer 13:

好吧,如果你不喜欢的口齿不清的语法也许汇编是要走的路。 :-)

这当然有代码和数据之间的最小的区别,是多范型(或者说是无模式),它无论是在学习方面,你可以做的招数是一记扩大(如果乏味)的经验。



Answer 14:

木卫一满足您所有的“重要”之分。 我不认为有这样做的疯狂元两轮牛车一个更好的语言在那里。



Answer 15:

一种支持,只是不能在静态编译语言来完成的元编程黑客

我很想找到一种语言,它允许一些是Lisp的做很酷的东西

Lisp语言可以被编译。



Answer 16:

你有没有尝试雷博尔?



Answer 17:

我的答案是没有。 我知道这两种语言,承担了Ruby的一个类,并在Python编程了好几年。 Lisp是擅长元编程由于它的唯一目的是把列表,它自己的源代码只是一个记号的列表,以便元编程是很自然的。 三种语言我最喜欢这种类型的东西是雷博尔,第四和因子。 REBOL是非常强的dialecting语言这需要从它的输入流的代码,运行一个表达人反对,使用写在语言规则转换它。 极具表现力和dialecting非常好。 因子和福斯都或多或少完全从语法离婚,您可以通过定义和调用程序的话他们。 它们通常大多写在自己的语言。 你不写在传统意义上的应用程序,扩展写你自己的话来定义您的特定应用程序的语言。 因子可以特别好,因为它有很多功能我只看到过Smalltalk中用于评估和源代码的工作。 一个非常好的工作区,交互式文档等。



Answer 18:

是不是真的有很多分离Python和Ruby。 我想说的Python社区比Ruby社区更大,更成熟,这对我来说真的很重要。 Ruby是一种更灵活的语言,它具有正面和负面的影响。 不过,我相信会有很多人去详细讨论这两种语言,所以我就扔了第三个选项成环。 怎么样的JavaScript?

JavaScript的最初设计是方案的网络,它的原型为基础的,这是在Python和Ruby的优势,尽可能多范式和元编程而言。 语法是不是像你一样的另外两个,但它可能是现存最广泛部署的语言,和性能每天都越来越好。



Answer 19:

如果你喜欢LISP风格的代码是数据的概念,但不喜欢Lispy语法,也许Prolog的将是一个不错的选择。

这是否有资格作为一个“有趣的使用,现代的语言”,我会留给别人去判断。 ;-)



Answer 20:

Ruby是我的选择探索的Python,Smalltalk和红宝石之后。



Answer 21:

什么ocaml的?

OCaml的特征:静态型系统,类型推断,参数多态,尾递归,模式匹配,第一类词法关闭,函子(参数模块),异常处理和增量代自动垃圾收集。

我认为它满足以下:

重要:

  1. 尼斯,清洁,理智的语法和一致的,直观的语义。 基本上是一个深思熟虑的,有趣的使用,现代的语言。
  2. 多范式。 没有一个模式是适合每一个项目,或者项目中甚至每一个小的子问题。
  3. 一个有趣的语言,实际上影响人认为对编程的想法。

有一些重要:

  1. 性能。 这将是很好,如果表现不错,但在性能才是真正的重点,我会用d代替。
  2. 充分证明。


Answer 22:

我已经使用Python非常一点,但更多的红宝石。 但是我要说,他们都提供你问什么。

如果我看到你所有的四点,那么你至少可以检查: http://www.iolanguage.com/

和莫扎特/盎司可能是你感兴趣的也: http://mozart.github.io/

问候弗里德里希



Answer 23:

对于Python风格的语法和Lisp的宏(这是真正的代码宏)和良好的DSL见收敛 。



Answer 24:

我不知道了Python会满足你的愿望(特别是有关代码和数据之间的最小区别点)的所有的东西,但有利于蟒蛇的一个参数。 有一个项目,在那里这很容易让你在d Python扩展程序,所以你可以有两全其美。 http://pyd.dsource.org/celerid.html



Answer 25:

如果你爱的玫瑰,你必须学会​​与荆棘:)



Answer 26:

我建议你使用Ruby去。

当我第一次开始学习它,我发现它真的很容易上手。



Answer 27:

不要用Ruby实现混合Ruby编程语言,思想,POSIX线程是不可能的红宝石。

你可以简单地与线程支持编译, 这已经可以在这个线程创建的时间 ,如果你原谅双关语。

在这个问题的答案很简单。 如果你喜欢口齿不清,你可能会喜欢红宝石。 或者,不管你喜欢。



Answer 28:

我建议你尝试一下两种语言并挑选吸引你的人。 无论Python和Ruby可以做你想做的。

另请阅读此线程 。



Answer 29:

用JS去只是在退房AJS(替代JavaScript语法)我github上http://github.com/visionmedia它会给你一些更干净外观封等:d



Answer 30:

关于你的主要点(元编程):Groovy中的1.6版本有AST(抽象语法树)编程内置的标准和集成功能。 Ruby有RubyParser,但它是一个加载项。



文章来源: Python vs. Ruby for metaprogramming [closed]