2009-04-26 33 views
23

我们正在用Java写一个大型的生产系统,我正在考虑我们是否可以用某种基于JVM的动态语言编写一些组件。从Java互操作性的角度来看,Groovy似乎是最好的选择。但是,Groovy的实现是否足够可靠地用于生产(我会这样认为),并且Groovy语言规范本身是否足够稳定,以便我们不必在一两年内大幅修改生产代码?你有什么经验?Groovy语言的稳定性如何?

总结(5/30/09):好的评论,我得到的意思是,你应该谨慎采用Groovy进行关键任务的生产使用,对于诸如整合测试用例等辅助用法来说是很好的,而且还有一个中间地带,它可能很好,但首先做你的功课。性能是一个问题,需要与开发人员的生产力提高保持平衡。 Bill和Ichorus基于Groovy的使用也有同样有用的答案,所以这是一个硬币折腾。

更新(12/3/09):最近我一直在认真研究Scala,这是另一种JVM语言。它由Martin Odersky设计和实现,Martin Odersky是当前javac编译器的原作者和Java Generics的合作设计者。 Scala是强类型的,但使用类型推理来去除大量的样板。这是面向对象和函数式编程的完美结合。詹姆斯戈斯林likes it。 Groovy的作者James Strachan,likes it too。而Odersky撰写javac的经验意味着Scala的原始performance is not far from Java's,这是令人印象深刻的。

更新(4/26/11):看看Groovy++,Groovy的静态类型扩展,其中performance等效于Java。看起来很有趣。

+4

你如何定义“足够可靠”?你在寻找什么标准?你如何定义“足够稳定”?你打算使用哪些功能? – 2009-04-26 23:48:15

+0

很好的澄清问题。 “足够可靠”意味着字节码生成的质量非常高,核心库中的错误很少(这些需要简单的解决方法并且要有充分的文档记录)。这里的“足够稳定”是指Groovy语言规范:我们今天编写的代码在Groovy的后续版本出来时需要大量的portig吗?让我们将所需功能的域设置为Koenig的Groovy in Action中讨论的功能域。 很多好的反馈在这里,谢谢大家! – 2009-05-02 07:19:28

+1

关于性能,请看看Groovy 2.0:http://java.dzone.com/articles/groovy-20-performance-compared – 2012-09-02 05:33:43

回答

20

编辑:这里差不多四年后,Groovy变得更加稳固。

我可以全心全意推荐它用于生产级项目。


我一直在使用Groovy支持的同时生产应用和目的,它是足够稳定。至于在真正的生产代码中实际拥有Groovy,我不认为我会这样做。 Groovy做了太多令人惊讶的事情。在过去的一年里,它在这方面已经有了很大的改进,但是每过一段时间我都会遇到一个由于生成的代码而难以追踪的bug(我的问题似乎围绕着范围界定)。我已经摆脱了Groovy(虽然我们使用的东西简单而坚实),并且使用了Python(jython实现),在我看来,它已经可以预测得多了。另外,python的可读性胜过Groovy。

您可以在Groovy中编写一些非常有趣的代码,用闭包和运算符重载以及whatnot。

这些语言的使用方便和辅助代码的速度......可以在需要时动态切换的东西。它们都不在生产中。我不认为我会投入生产,除非它作为一种权宜之计,在重大匆忙中或者作为一个概念或原型的证明来批评某些事物。

而在实际生产中,它将不得不处于最恶劣的情况下,我会指定某人在纯Java中为下一版本重写它。我有98%的人确信生产中的任何一个都可以,但是这2%是太多不必要的风险。

2

脚本语言在语法特征方面“演化得太快”。

如果您想要将为 多年留兼容JVM语言,
的Java是你唯一的选择;)

顺便说一句,我不认为代码的可读性是由脚本语言自动保证的 。

+1

为什么这是downvoted?它符合有关稳定性和兼容性的原始问题。这是一个有效的观点,如果你想创建一个应用程序,应该持续3 - 5年的时间,同时还需要在普适性,稳定性,支持,劳动力,IDE支持,分析器等方面进行“定制”等等,JVM上最明显的选择仍然是Java。当然,对于单元测试,粘合代码等,JVM上有很多语言选择,比如Groovy,Clojure,Scala等等。 – Ice09 2011-10-11 07:55:28

17

我们有几个在Grails上运行的生产应用程序(使用Groovy作为语言)。到目前为止,没有问题产生。至于JVM的兼容性,看看过去5年里JVM字节码有多少变化......就像添加了1条指令,没有一条被取消。

Groovy的新版本会在明年推出吗?是。你会被要求改变他们吗?不可以。尽管你可能想要,1.6是一个巨大的速度提升。

这给我们带来了Groovy的主要缺点,速度问题。显然,Groovy比直接的Java更慢。目前的号码最多为10 TIMES较慢,对于某些操作。这就是说,你的CPU是你的应用程序的瓶颈?对我们来说,这主要是DB访问和延迟。如果它对你来说是一样的,那么CPU花200ms处理页面请求而不是35ms会怎样?

这是Groovy唯一的问题吗?不。动态语言有重构困难,因为代码中的任何地方都不一定有完整的类规范。但是,这通过较小的代码大小进行部分平衡,这使得更容易找到修改代码的位置。

无论如何,Groovy是用于生产用途的完美语言。如果担心可靠性,请将它与Java混合以用于“关键”代码。这是Groovy的最佳组成部分......它与Java类混合得多么容易。

4

我目前正在探索使用Groovy编写单元测试。这具有

  1. 允许使用比Java稍微简单的语法完成编写测试的潜在乏味部分。
  2. 使Groovy代码停止生产。
  3. 允许大部分代码库以非Java语言编写。

当然,我们还没有开始,但这至少是我尝试向我们的新项目(以及可能存在的项目)引入备用JVM语言的方式。我有和你一样的担忧,甚至比稳定性更重要。

1

在我以前的公司中,我们使用了Grails/Groovy作为我们的主后端,并且从那次经历中我会说我会在大多数情况下选择Groovy,因为它可以与Java无缝地互操作,否则更有趣和表现力。此外,我预计数据库几乎总是我的应用程序的瓶颈,而不是语言表现,而且据我所知,我们并没有遇到任何有关Groovy的稳定性问题/错误。

但个人而言,在大多数情况下,它通常与Groovy vs Java无关 - 它是关于Groovy/Java +可用库与其他语言(如Python/Jython/JavaScript/Ruby +可用库)的关系。还有很多其他的考虑因素,例如社区的力量,针对您的特定应用的相关技术的成熟度等。特别是对于Web开发,Grails很体面,但社区似乎缺乏。我的整体观点是,我会继续使用python或Node.js。如果我需要JVM,我会使用jython兼容的python web开发环境。

1

我一直在玩Groovy一个月左右。简单性非常好,动态语言功能也非常酷。然而,速度绝对是一个问题。另外,Groovy控制台真的很糟糕。你不能做你可以做的事情,例如在python中。每隔一段时间,我必须重新启动控制台,重新导入,等等。它还会在控制台模式下忘记我放入变量的值;不知何故神秘地他们超出了范围。 (这是否是因为JVM?我不知道)。我不能从头脑里想出一个例子,但我在Groovy控制台中得到的行为与我在Grails控制台中获得的行为不同,并且与通过在脚本中编写代码而获得的不同。

还有几个警告。请注意,Groovy几乎与Java完全兼容,但不是100%兼容。例如,这不会编译:

public class HelloWorld { 

    public static void main(String args[]) { 
     System.out.println("Hello, world!\n"); 
    } 
} 

而且看看How to get classpath in Groovy?