Java 之外,是 Scala 还是 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-vs-groovy-static-typing-is-key-to-performance)”。文中,他举了一个实际的例子,试图说明针对同样的算法,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团队一起合作,制作出一门既强大又易用的语言。

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

时间: 2024-10-11 17:24:00

Java 之外,是 Scala 还是 Groovy?【转载】的相关文章

java环境中基于jvm的两大语言:scala,groovy

可以在java项目里混编这两种语言: scala:静态语言,多范式语言,糅合了面向对象.面向过程:可以与java和net互操作:融汇了众多的语言特性,包括类似net的闭包.lambda表达式:正是语言特性较多,语言复杂度也较高~~ groovy:动态语言,既可作为面向对象语言又可做脚本语言:拥有动态语言的好处:语法简单~~ scala.groovy都是作为java的替代语言,基于jdk1.6可以使用起来像jdk1.8的高级语法特性:学习成本上groovy更容易上手: scala流行的web框架:

给Java开发者的Scala教程

author:Michel Schinz,Philipp Haller 1. 简介 本文将该要的介绍Scala语言和其编译.这里假设读者已经有一定的java开发经验,需要概要的了解他们可以用Scala 做些什么. 2. 第一个例子 我们用全世界最著名的代码来作为开始.虽然没什么用,但是可以很好地直观的了解Scala: object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!")

Java 内存模型及GC原理 (转载)

一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序的性能. 本文将从JVM内存模型.GC工作原理,以及GC的几个关键问题进行探讨,从GC角度提高Java程序的性能. 一.Java内存模型 按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. JVM主要管理两种类型内存:堆和非堆,堆内存

Java的垃圾回收机制(转载)

引用自 <http://lemote.blog.163.com/blog/static/1748395072013111641050934/> 引自文章:<http://blog.csdn.net/zsuguangh/article/details/6429592>    Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间.需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,很多人来我公司面试

《JAVA与模式》之适配器模式(转载)

适配器模式比较简单,偷个懒,直接转载一篇. 个人理解: * 类适配器是通过继承来完成适配 * 对象适配器是通过传递对象来完成适配 * 不管哪种,其实都是通过引用特殊接口的对象来完成特殊接口的适配调用 转载地址:http://blog.csdn.net/jason0539/article/details/22468457 1. 概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 2. 解决的问题 即Adapter模式使得

spark2.x由浅入深深到底系列六之RDD java api调用scala api的原理

RDD java api其实底层是调用了scala的api来实现的,所以我们有必要对java api是怎么样去调用scala api,我们先自己简单的实现一个scala版本和java版本的RDD和SparkContext 一.简单实现scala版本的RDD和SparkContext class RDD[T](value: Seq[T]) {   //RDD的map操作   def map[U](f: T => U): RDD[U] = {     new RDD(value.map(f))   

《JAVA与模式》之单例模式(转载)

原文地址:http://blog.csdn.net/jason0539/article/details/23297037 概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的

Java Object 对象创建的方式 [ 转载 ]

Java Object 对象创建的方式 [ 转载 ] @author http://blog.csdn.net/mhmyqn/article/details/7943411 显式创建 有4种显式地创建对象的方式: 1.构造器:用new语句创建对象,这是最常用的创建对象的方式. 2.反射:运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法. 3.克隆:调用对象的clone()方法. 4.序列化:运用反

Java 8 vs. Scala(二):Stream vs. Collection

[编者按]在之前文章中,我们介绍了 Java 8和Scala的Lambda表达式对比.在本文,将进行 Hussachai Puripunpinyo Java 和 Scala 对比三部曲的第二部分,主要关注 Stream 和 Collection,本文由 OneAPM 工程师编译整理. 首先,为大家做一个简短的介绍,collection 是有限的数据集,而 stream 是数据的序列集,可以是有限的或无限的. Streams API 是 Java 8 中新发布的 API,主要用于操作 collec