Python、Groovy还是Ruby?(根据问题中列出的标准)

36
考虑以下列出的标准,你会选择Python、Groovy还是Ruby呢?
标准(重要性分数以10分为最重要):
- API和库的丰富程度(例如数学、绘图、网络)(9分) - 可在桌面(Java/C++)应用程序中嵌入的能力(8分) - 部署的易用性(8分) - 能够与DLL/Shared Libraries进行接口交互的能力(7分) - 能够生成GUI界面的能力(7分) - 社区/用户支持(6分) - 可移植性(6分) - 数据库操作(3分) - 语言/语义(2分)

9
我认为你漏掉了一个标准:- 项目团队之间的熟悉程度(10) - Greg Hewgill
4
你是否排除了 jRuby 和 jython?它们会让关于可移植性和语义的讨论变得混乱不清。 - Michael Easter
2
如果语言/语义只有2分,我会认为任何语言都可以被建议。 - David Thornley
1
对于小型项目,请将Lua添加到列表中。 - Dima Tisnek
10个回答

34

我认为很难得出客观的比较结果。我个人更喜欢Python。针对你提到的一个标准,Python从一开始就被设计为可嵌入语言。它有非常丰富的C API,并且解释器已经被模块化,使得从C语言调用变得容易。如果Java是你的主机环境,你应该考虑Jython,它是Python在Java环境(VM和库)内的一种实现。


29

我曾经和这三种语言都有过接触,以下是我的总结:

  • Python

    • 有非常成熟的库
    • 库文档齐全
    • 可以通过docstrings在运行时从调试器/ shell中访问文档
    • 你可以不使用IDE来开发代码
  • Ruby

    • 有一些很棒的库(尽管有些文档写得很差)
    • Ruby的反射机制很出色。它使编写代码变得很容易(即使没有文档)
    • 你可以不使用IDE来开发代码
  • Groovy

    • 你可以从Java中受益
    • 其语法在某种程度上受到Ruby的启发
    • 如果你不用IDE开发,那就很难编写代码。你无法从控制台调试代码(这是Python/Ruby很容易做到的),而现有的Groovy插件还有很多工作要做。我编写了一些使用Groovy的应用程序,并且随着它们变得越来越大,我后悔没选择Ruby / Python(调试会更容易)。如果你只使用IDE开发,Groovy是一种很酷的语言。

Java的库成熟度与Python相比如何? - intuited
2
通常情况下,Java的库质量相当不错。而且由于你可以使用Jython(在编写Python代码时受益于它们),我想无论哪种方式都是好的。 - Geo

24

仅是为了让事情变得更加混乱...

Groovy让你可以访问Java。 Java拥有非常丰富的API /库、应用程序等。

Groovy是可嵌入的,尽管在Java中最容易使用。

如果您正在谈论非Groovy / Java的DLL /库,则可能会有一些问题,但是有一些API可以帮助解决问题。

我做过一些Python编程,但由于更熟悉Java,因此Groovy对我来说更容易上手。


10

你对Groovy不熟悉?我刚开始学,试试这个(在groovyconsole中输入):

File.metaClass.invokeMethod = { String name, args ->
    System.out.print ("Call to $name intercepted...");
    File.metaClass.getMetaMethod(name, args).invoke(delegate, args);
}

new File("c:/temp").eachFile{
    if (it.isFile()) println it.canonicalPath
}

第一段代码采用AOP技术拦截File对象的所有方法调用,无需额外工具。此操作是针对现有Java类动态执行的。

在第二个代码块中,您删除了'f'闭包参数。由于只有一个参数,它默认为内置的“it”变量,可用于闭包上下文中。

以下是您将获得的结果:

"调用isFile被拦截...C:\temp\img.jpg"

等等。


8
尝试使用Groovy,它具有您需要的所有功能。您可以在不修改类的情况下使用现有的Java库。 基本上,Groovy是Java++,更具动态性和学习乐趣(就像Ruby一样)。
我不喜欢Ruby或Python语法,所以我将把它们放在后面。Groovy就像C / C ++语法,所以我喜欢它哈哈 :)

7

Python拥有全部九个标准。得分为56分。

我相信Ruby和Python拥有相同的功能,只不过似乎比Python库少一些。所以它得到了51分。

我不确定Groovy是否具备所有功能。

由于Python得到了56分,Ruby得到了51分,Python略胜一筹。

然而,我认为这种决定仍可能涉及到某些主观问题,超出了这九个标准的范围。


3
恕我直言,我认为Ruby的库数量不及Python,更不用提Groovy了。例如,如果我查看Ubuntu软件包(包括多元宇宙,基本上是Debian软件包),有920个Python软件包名称和464个Ruby软件包名称。Groovy没有第三方库。 - J S
3
更新:我查看了Rubyforge和PyPI,似乎支持这个估计结果,即Python拥有的库几乎是Ruby的两倍。 - J S
3
两年后的更新:列出的RubyGems数量比PyPI包多。但这不是一场竞赛。Ruby和Python都已经足够成熟,拥有适用于你想做的任何事情的优秀库。 - Mark Thomas

6
根据您的要求,我会选择JRuby:
  • API/库的丰富性(例如数学、绘图、网络)(9)

JVM可以访问的一切,这是非常多的内容。

  • 嵌入到桌面(Java/C++)应用程序中的能力(8)

出色的Monkeybars框架,可以让您在GUI设计器中设计Swing GUI,然后使用干净的Ruby代码进行连接。

  • 部署的简易性(8)

Rawr可以将您的应用程序打包为可执行jar文件。

  • 与DLL/共享库接口的能力(7)

Java共享库很容易,C共享库通过jna + libffi实现。

  • 生成GUI的能力(7)

Swing非常好用。不确定使用QtJambi有多容易,但肯定是可行的。

  • 社区/用户支持(6)

非常多。Ruby拥有出色的社区。

  • 可移植性(6)

JVM能够运行的所有地方。

  • 数据库操作(3)

所有Ruby数据库库和所有Java数据库库。

  • 语言/语义学(2)

这是Ruby明显领先于Groovy和Python的地方。该语言在早期采取了一些非常出色的设计决策,这体现在标准库的一致性和功能上。特别是Blocks使其使用起来非常愉快。


3
这种通过特性加分的方式并不是选择编程语言的好方法。你最好选择你最擅长的语言。如果你一个都不会,可以试用一段时间。如果你有一个非常具体的项目,那么可能某些编程语言会更好,但如果你只是有一般偏好,你永远不会得出共识。
话虽如此,Python非常灵活,它是你列表中最流行的,所以通过搜索解决任何问题最容易,因此我建议使用Python。

2

Perl?天哪。

正如有人所观察到的那样,Perl就像标点符号工厂里的一次大爆炸。如果结果代码不是自描述的,它的简洁性不是优势。

我已经用Groovy做了一些实用任务,很容易上手。完全可以访问Java库,还有一些很酷的附加功能,比如使用闭包列出目录中的文件:

// process all files printing out full name (. and .. auto excluded)

new File(basedir).eachFile{ f->

    if (f.isFile()) println f.canonicalPath
}

3
"Perl太多标点符号/行噪声了",这是一个从未尝试过它的人的最大特征。 - Kent Fredric
@Kent Fredric:大部分同意,不过我会说“学习”而不是“尝试”。学习需要一些时间,但任何语言都是如此。由于某种原因,许多人似乎认为任何不使用与他们已知语言相同约定的语言都是次等的。如果有什么区别的话,标点符号似乎更容易记忆,因为(或许具有讽刺意味)一旦你理解了它的用法,通常只有一个映射是有意义的,而不像使用单词(具有同义词)表示相同概念的语言。 - intuited
在使用Groovy进行“实用任务”时的问题是Java没有像chmod、chown、fork等低级方法。 - Kedare
"chown tmp/foo".execute() 是什么意思?- http://groovy-lang.org/groovy-dev-kit.html#process-management - Kalpesh Soni

0

我知道它不在你的列表上,但至少看看Perl。

  • API /库的丰富性可以让一艘船沉没。
  • 运行在比大多数人意识到的系统上更多的系统上。
  • 与二进制库很好地配合使用。
  • 拥有庞大的社区。
  • 可移植性,请参见上文。
  • 数据库操作:有更多的方法。(选择您喜欢的模块)
  • 是最具表现力/简洁的语言之一。

Perl 对于那些不熟悉它的人来说,一个缺点是其众多模块的组织不足。 据我所知,至少没有一种方便的方法可以找到最适合特定任务的多个可用模块中的最佳模块。 事实上有很多选择是美好的,但应该有更好的方法来筛选出被认为是生产就绪和/或常用和/或功能齐全和/或轻量级和/或与各种 Perl 版本兼容的模块(例如,某些较新版本的模块仅支持 Perl 5.10)。 - intuited
@intuited Perl不是我最喜欢的语言,但你完全搞错了。Perl是我所知道的最容易找到合适模块的语言。CPAN(http://search.cpan.org/)有很多方法来确定适用性:在许多操作系统平台上对新提交的自动化测试;评级和评论;合理的命名和命名空间约定等。CPAN比RubyGems和PyPI更好组织。 - Mark Thomas
1
@Mark Thomas:看起来cpan网站的功能可能需要改进。我之前并不知道当你浏览类别时会显示dlsip评级系统,因为它在文本搜索时没有显示出来,而这通常是我的操作方式。这是一个非常有用的数据集,但我不明白为什么它没有被一致地展示出来。实际上,在那种情况下似乎是唯一的上下文,即使在你进入模块页面时也没有显示出来。 - intuited
@Mark Thomas:我还在寻找“高级搜索”页面,可以让我从dlsip、用户评分、版本号等方面搜索符合某些标准的模块。这个页面存在吗?__________尽管PyPI也没有这种功能,但是PyPI搜索结果中的“得分”列至少有点用处。Python模块开发趋向于收敛,很多情况下都会收入标准库,这使得它变得不那么重要。此外,在模块页面上通常会给出模块的“生产状态”,这也很有帮助。 - intuited
已经被评分的项目往往具有更高的优先级,并且其评分得分会影响已评分项目的顺序。=) - Kent Fredric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接