Groovy与Jython或JRuby相比的优势是什么?

34
为什么我会选择使用Groovy而不是Jython或Jruby?这种语言是否提供任何固有优势来弥补Jython和Jruby技能适用于其JVM之外的父语言的缺点?
请记住,我故意保持这个问题的普遍性,但如果在特定领域存在任何优势,请不要犹豫地描述它们。
编辑:为了澄清,如果我在Jruby中编写了一些代码,现在,在某些情况下,我可以将该代码移出JVM,或者至少我已经更好地理解了Ruby。而Groovy技能仅适用于仅存在于JVM内部的语言。 Jython和Jruby具有这种内置优势,那么Groovy有什么来弥补这种劣势吗?
如果您没有发现Groovy有任何优势,并且建议只使用Jython或Jruby,请告诉我。
编辑2:感谢大家所有的答案,其中大部分都表明,Groovy与Java集成得略微好于Jython或Jruby。
后续:使用Netbeans 6.5作为我的IDE,我发现Groovy与Java项目集成比Jruby更好。我不确定缺乏集成是否是Jruby或Netbeans的失败。但是在使用了一段时间后,Groovy肯定具有优势。

3
这段话的意思是,像Jython、JRuby和Groovy这样的编程语言并不特定于某个领域,它们基本上都能够完成你想要做的事情。因此,只需要选择自己最擅长的一种即可,无需将此发帖回答。 - SCdF
3
或者,选择一个名字最酷的。 - SCdF
那么你的意思是说使用Groovy没有比其他两种语言更有优势? - James McMahon
3
我想说的是,使用这三种编程语言中的任何一种都没有固有的优势。人们花太多时间决定使用哪种语言或框架,而不是专注于完成任务。请把重点放在完成任务上。 - SCdF
完美的问题。正是我想知道的。 - Dan Rosenstark
性能基准测试,2013年结果:JRuby 4倍 > Groovy 2倍 > Jython。Perf benchmark - Cees Timmerman
5个回答

38

我在Ruby和Groovy方面进行了相当广泛的开发(还使用Grinder作为负载测试工具进行了一点Jython的开发)。

在这3种语言中,我最喜欢Groovy。我认为它的闭包语法是最好的,并且它与JVM上其他Java类的集成最紧密。虽然我已经有一段时间没有使用JRuby了,但在JRuby中导入Java类并使用类加载器感觉不够干净。

Groovy实际上是Java的超集,这意味着Java程序员群体可以更快地掌握Groovy而不是Ruby/JRuby。他们可以像编写Java一样编写它,并在逐渐掌握它时慢慢开始插入惯用的Groovy语法。

关于你所问的问题,我认为Groovy的另一个优势是优化时可以使用的语言几乎是完全相同的语法,即Java。如果您在Ruby或Python领域工作,则必须使用大幅度不同的C或Java。使用Groovy编程有助于保持Java技能的磨练。

如果您特别需要Ruby或Python基础设施或团队对这些环境很熟悉,那么我可以考虑选择其中一种语言。

实际上,这3种语言都非常好,并且您选择的语言应更多地取决于您要解决的问题和可用的资源。一旦您熟练掌握了一种动态语言,学习第二种或第三种语言就会变得更容易。


14

如果需要将Java与Jruby/Groovy混合使用,我建议选择Groovy。众所周知,Groovy与Java的整合更为紧密。

但就语言实现而言,我更喜欢Ruby语言而非Groovy,因为Ruby语言围绕自身展开,而在Groovy中有一些嵌入在实现本身的hack技巧(只需查看Grails stacktrace和Rails stacktrace的区别即可明白我的意思)。

强烈推荐观看Neal Ford的比较Groovy和JRuby的演讲


1
谢谢您提供链接。很有趣,但我感觉没有听到幻灯片演讲的重要组成部分。 - James McMahon
2
过去会议的列表:http://www.nealford.com/mypastconferences.htm 带您进入演示的 Github 存储库:http://github.com/nealford/presentations,这是 Groovy vs JRuby 的 PDF 直接链接:http://github.com/nealford/presentations/raw/master/Comparing%20Groovy%20and%20JRuby%20(Neal%20Ford).pdf。 - atomicules

3
我认为Dick Wall在Java Posse podcast(#213, about 34:20 in)中对这三种语言的区别做了非常好的总结... "JRuby旨在让程序员感到快乐...它是开发人员的选择; Python在简单和教育方面有着非常强的根基; Groovy直接针对Java开发人员...它是Java非常熟悉的环境...并支持注释"。
就将语言移出JVM而言,我不认为Java运行时会带来太多的开销--它是一个简单的安装过程,并且您需要设置一些环境变量--但它确实提供了许多好处,包括成熟的运行时已经高度优化,以及大量的库。 JRuby团队现在报告比本地MRI更好的性能。 http://blog.headius.com/2008/08/twas-brillig.html

1

我只有使用Jython和Groovy的经验。目前,Jython最大的缺点是推荐用于生产(2.2.1)的最新版本功能集“大致对应于Python-2.2”(Jython FAQ)。有一个beta版正在实现我认为是Python 2.5,这是一个版本落后了。不知道JRuby是否也有同样的情况。


是的,Jython 的发展速度还没有 CPython 快,但随着 Sun 全职开发人员的加入,未来情况有望得到改善。但在 JVM 之外,Python 2.2 技能仍然比 Groovy 更实用。 - James McMahon
是的,同意。今天早上我匆忙回复了(试图赶去工作)。Groovy确实有一些不错的语法糖。我特别喜欢能够将字符串映射(表示方法名称)转换为闭包(方法实现)作为接口的实现。 - Anthony Cramp
2
Jython现在正式发布了2.5版本。希望它像JRuby一样好。 - Joshua Partogi

1

我不知道为什么你应该选择Groovy,因为我不知道你的背景。如果你是Java开发人员,那么Groovy会比JRuby或Jython更类似于你当前使用的语言。Groovy结合了Java语言、Java平台和Ruby语言的优点。


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