InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

Java之外,选择Scala还是Groovy?

作者 宋玮 发布于 2008年1月14日

领域
语言 & 开发
主题
动态语言 ,
Java ,
语言
标签
JVM ,
Groovy

Scala和Groovy都是基于JVM的语言,相比Java都有更加简明的语法和丰富的表达能力。对于那些既想不脱离开JVM又想避免Java繁琐的语句的开发人员来说,Scala和Groovy都是不错的选择。可是选择哪一个才能在未来发展过程中取得先机呢?哪一个是未来发展的方向呢?这些都是困扰开发者的难题。

去年早些时候,一篇名为“Scala,Groovy的杀手? ”的博客对Scala和Groovy进行了对比:

Scala和Groovy之间的核心区别在于前者是静态类型的。有些人可能争辩说这使得达到脚本化目标变得更加复杂了,而脚本化正是Groovy的动机。然而,Scala有完整的体系特征,这使Groovy看上去更像个玩具。比如,Scala有“sequence comprehensions”。该要素导致对算法的表述非常紧凑和强大。

Scala还有更多被证明是非常有用的特性,如嵌套类,currying和代数类型模式匹配。它还支持类似于JDK1.5所增加的泛型和注解。这些还都只是冰山一角。

之后,Derek Young撰文“Scala对比Groovy:静态类型是性能的关键”。在文中他举了一个实际的例子,试图说明针对同样的算法,Scala的性能远高于Groovy。

然而,Scala并不是尽善尽美的,它也有一些明显的缺陷。Rick Hightower在最近发表的一篇博客中,尖锐地批评了Scala的语法问题:

Scala并不是更好的选择。在阅读了Scala的文档之后,我的想法是:虽然这种语言的特性听起来挺好,但是语法却让我想放弃。为什么事情非要为了不同而不同?Scala让Groovy看起来比以前更加美味可口。

憎恨是个很强烈的词。我恨Scala的语法。请不要再推进这种语法了。……Scala有好的思想吗?有。借用过来就行了……

总而言之,Scala看起来像下一个被过度宣传的语言。只需要把其精华引入到Groovy中,然后扔掉那些糟糕的语法。我最喜欢的Scala特性是推理类型和强类型。C#3.0也有这些。(我不用C#,不见得我不喜欢它的一些特性。)

Rick Hightower还建议Sun应该在Groovy上进行投资,而不是对JRuby作无谓的投资。

Groovy更像Java,更容易上手,语法也让开发者不反感。为什么Sun在JRuby上投那么多钱呢?

投资应该给Groovy。这样了解Java的开发者可以更快地学习Groovy,而且如果有工具支持他们,那么就更可能这样做。

为了说明Sun投资在Ruby上的不明智,Rick Hightower还引用了一幅统计图表来说明企业采用Ruby的趋势还是比较低的:

另外,无论是Ruby、Scala还是Groovy都有对应的Web框架,且对应的框架都是用各自对应的语言编写的。这些框架分别是Rails、Lift和Grails。尽管Lift和Grails中的许多东西都从Rails借鉴来的,但是Grails对其他已有Java技术框架进行了很好的继承,这无疑会保护用户或厂商在这方面的已有投资。Grails框架参考文档中这样描述:

Grails构建在这些概念之上,并且显著地减少了在Java平台上构建Web应用的复杂程度。不同的是,这些是建立在已确立的如Spring和Hibernate这样的Java技术之上的。

目前,Scala和Groovy两种语言都在快速发展的过程中。就目前的情况来看,Groovy的优势在于易用性以及与Java无缝衔接,Scala的优势在于性能和一些高级特性,如果在发展过程中两者能互相借鉴对方的优点来充实自身,对开发者来讲无疑是福音。正如第一篇所引用的博客作者最后提到的那样:

大家并不想看到一场殊死斗争,而是想看到更注重实效思想的Groovy团队能与更具有学术思想的Scala团队一起合作,制作出一门既强大又易用的语言。

你会将赌注押在谁身上呢?

宋玮 有多年软件开发经验,长期担任技术管理和项目管理工作,一直关心开源软件的发展动态以及软件过程和敏捷开发的实践探索。

无需押宝 发表人 Chen Island 发表于
Agreed,如今许多软件致胜的关键(功夫)恰在程序语言之外。 发表人 Zhang Charlie 发表于
Groovy Web 发表人 Huang Joe 发表于
Re: Groovy Web 发表人 qiu james 发表于
Groovy 是 Java 的补充 发表人 Zhang Gavin 发表于
Re: Groovy 是 Java 的补充 发表人 wang shaoying 发表于
目前Scala占绝对优势 发表人 ye meng 发表于
Re: 目前Scala占绝对优势 发表人 Song Weinan 发表于
  1. 返回顶部

    无需押宝

    发表人 Chen Island

    我已经在用Groovy了,目前用起来还是挺舒服的;暂时没有去试用Scala的动力。

    说实话,语言很重要,但不是最重要的,而且语言之间的切换/共用并没有那么可怕。无需强求一种语言满足所有需求,熟悉超过一种编程语言应该是开发人员/爱好者的基本要求。

  2. 返回顶部

    Groovy Web

    发表人 Huang Joe

    我认为不一定完全使用grails开发web应用,因为目前它对web服务器的兼容性还不算非常好,可以考虑使用groovy+java混合编程以减低web的复杂度

  3. 返回顶部

    Agreed,如今许多软件致胜的关键(功夫)恰在程序语言之外。

    发表人 Zhang Charlie


    Island Chen 于 2008-1-14 8:20 说:

    说实话,语言很重要,但不是最重要的,而且语言之间的切换/共用并没有那么可怕。无需强求一种语言满足所有需求,熟悉超过一种编程语言应该是开发人员/爱好者的基本要求


    根据我的实践经验,很多情况下比编程语言更重要的,往往是编程语言之外的环境和资源(参照系统论的观点)。其实,软件研发的重心,早就发生转移了。

    太极敏捷教练 张恂
    www.zhangxun.com

  4. 返回顶部

    Re: Groovy Web

    发表人 qiu james

    Groovy 的首次启动速度太慢;需要进一步改进;
    在服务器端,第一次装置后,运行速度还可以接受;
    希望它的启动速度能够快点,至少接近beanshell

  5. 返回顶部

    Groovy 是 Java 的补充

    发表人 Zhang Gavin

    Groovy只适合做 Java 的有益补充
    在企业开发中,Groovy还是不适合

  6. 返回顶部

    Re: Groovy 是 Java 的补充

    发表人 wang shaoying

    至少在中国Scala还需要时间,目前Scala的社区不够完善,你无法迅速找到和解决你的问题。

  7. 返回顶部

    目前Scala占绝对优势

    发表人 ye meng

    James Strachan说过:
    I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy.
    macstrac.blogspot.com/2009/04/scala-as-long-ter...
    再看看google trends:
    www.google.com/trends?q=scala%2C+groovy
    目前来看Scala受到关注要多得多。

  8. 返回顶部

    Re: 目前Scala占绝对优势

    发表人 Song Weinan

    google trends这个说明不了什么,这里的scala和groovy不一定就是指编程语言

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。