写点什么

Java 之外,选择 Scala 还是 Groovy?

2008 年 1 月 14 日

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 团队一起合作,制作出一门既强大又易用的语言。

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

2008 年 1 月 14 日 04:2515486
用户头像

发布了 150 篇内容, 共 35.6 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营 第四周 总结

Poplar

架构师训练营 - 命题作业 第 4 周

水边

极客大学架构师训练营

瑞幸商业模式的本质与组合式创新

石云升

创业 瑞幸 组合式创新

架构师 第四周作业

冯凯

分布式系统设计 - 第四周总结

孙志平

架构师训练营第四周总结

一剑

架构师训练营作业

邵帅

架构师训练营 - 第四周总结

牛牛

学习 极客大学架构师训练营

一题搞定static关键字

Java课代表

Java 面试

Week04作业

熊威

程序员的乐趣,生成自定义二维码,5行Python代码就搞定

程序员生活志

Python 程序员 代码 二维码

我精心整理的 136 页 Excel 数据透视表 PDF 文件!【附获取方式】

JackTian

Python 程序员 数据分析 Excel 数据透视表

给“小白”漫画+图示讲解MyBatis原理,就问香不香!

码农神说

Java mybatis

【科普】Scrum——从橄榄球争球到敏捷开发

陈琦

Scrum 敏捷开发

架构师训练营第四周总结

陈靓-哲露

【week04】总结

chengjing

什么是工程师思维?

尖果爱学习

思维方式

架构师训练营 - 作业 -4- 互联网产品问题与架构方案

superman

架构师 第四周学习总结

冯凯

架构师训练营 第四周 作业

Poplar

大型互联网应用系统都采用了哪些技术和手段,解决了什么问题?

hellohuan

极客大学架构师训练营

架构师训练营第四周作业

陈靓-哲露

架构师训练营第四周作业

sunnywhy

第四周作业

武鹏

第四周总结

武鹏

扯淡 Spring BeanDefinition

CoderLi

Java spring 程序员 源码分析

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。

chenzt

Lambda初次使用很慢?从JIT到类加载再到实现原理

Kerwin

Java Lambda 类加载 JIT

架构师训练营4周总结

邵帅

架构师训练营第四周作业

大丁💸💵💴💶🚀🐟

架构师训练营 - 第四周学习总结

hellohuan

极客大学架构师训练营

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

Java之外,选择Scala还是Groovy?-InfoQ