在Java项目中与Java配对的最佳动态语言

时间:2010-10-08 21:35:44

标签: java groovy jruby jython dynamic-languages

在大型Java项目中与Java配对的最佳动态语言是什么?

我们正在考虑将动态语言用于测试,控制器和服务。一些选项是Groovy,JRuby或Jython。每个人的优点和缺点是什么?理想情况下,我们可以从动态语言调用Java,也可以从Java调用动态语言。

编辑:如果有帮助,我们将Hibernate与PicoContainer和Webwork一起使用。

谢谢, 亚历

5 个答案:

答案 0 :(得分:9)

实际上有三种动态语言可以提供与Java无缝的互操作 - scala,groovy和clojure。从那里,我会问你的团队他们宁愿使用哪种语言,或者让他们尝试使用每种语言的原型并看看他们的想法。

如果团队效率在开始时并不重要,请查看每种语言试图解决的问题:

  • 对于经验丰富的Java开发人员来说,Groovy会非常松散但很自然,并且由于它是鸭子打字,因此可以快速开发原型。
  • Scala将使您能够编写DSL,使其成为框架和工具的理想选择,您可以使用更类似于描述问题的语言来解决问题。
  • Clojure将强制执行lisp的函数式编程和不可变状态概念,并且非常适合人工智能,自然语言处理等方面的问题。

最后,我走上了寻找基于项目的完美语言的道路,并发现没有完美的语言。我上面提到的所有语言都编译为本机JVM字节代码并且非常可靠。有时你只需选择一种可能不像其他语言那样酷的语言,但会让你解决问题。

答案 1 :(得分:4)

我推荐Groovy,主要是因为它与Java无缝互操作,几乎是Java的超集,所以Java开发人员很容易学习。我绝对没有证据支持这一点,但基于传闻,猜测和个人经验,我怀疑Groovy社区比JRuby或Jython的社区大得多。

顺便说一句,在我看来,Groovy++太不成熟,无法考虑生产用途。

答案 2 :(得分:2)

当然,答案在某种程度上取决于品味和灵活性。如果有些人没有使用Ruby或Python的经验,那么Groovy将会有更接近Java的语法(实际上它是Java的超集),因此更易于销售。

我无法真正与JRuby交谈,因为我没有使用它。

Groovy为您提供了与您列出的三个Java最简单的互操作。它在EasyB中有一个非常好的BDD库,我非常喜欢它。从消极方面来看,我认为Groovy的功能或语法并不能很好地结合在一起。它可能有点像Java的一大堆独立扩展。

Jython当然是Python,所以语法不同,但也具有Python的所有一致性。 Interop非常擅长脚本级别,但如果你想在Jython中编写你用Java调用的预编译类,那么至少有点尴尬。 Groovy的另一个主要帮助就是你有一个真正的REPL来与Java项目进行交互。

我还要提到Clojure,语法更加不同,但Java互操作性非常好,可能是最好的,而且你还有一个REPL。如果民众难以适应Ruby或Python语法,那么Lisp可能就是正确的。

答案 3 :(得分:1)

Clojure可能是控制器和服务的最佳动态语言。 (取决于你对“服务”的意思。

Scala和Groovy ++拥有最好的java互操作,但那些不是动态的(在Groovy ++中,你自己决定键入什么。)。 Scala具有动态语言的外观和感觉。 Scala具有良好的测试框架http://www.scalatest.org/,而Specs和AKKA非常mature用于服务,并且还具有Java API

答案 4 :(得分:1)

我建议你去Jython。语法很简洁,您可以获得Python为您提供的任何其他功能/便利。

例如,如果你使用Groovy,你基本上只限于Java会给你的东西。 Jython也会将Python的强大功能添加到其中。

如果它有帮助,我已经将Jython与Hibernate,SOAP,Corba和EJB一起使用,并且比使用普通Java做同样容易。