Scala,Groovy,Clojure三门语言的区别

Scala,Groovy,Clojure三门语言的区别

来自James Fassett的提问

Scala vs. Groovy vs. Clojure

是否有人能解释下Scala,Groovy和Clojure之间的主要区别。我知道这些语言都是编译之后运行在JVM上的,但是我想要一个它们之间的简单比较。

来自Daniel C. Sobral的最佳回答

Groovy是一门动态类型语言,语法与Java十分接近,在Java的基础上做了一些语法优化,以支持更简洁的代码和更少的样板文件。它既可以通过解释器执行,也可以进行编译,使得它对于快速原型设计,写脚本,学习动态语言而不需要学习新的语法(假设你了解Java)是很有好处的。从Groovy 2.0版本开始,它也开始支持静态编译。Groovy支持闭包,并且支持一定程度的函数式编程,尽管它离传统的函数式编程的定义还很远。

Clojure在Lisp语系的基础上附加了一些像软件事物内存(STM)这样的高级特征。如果你喜欢Lisp,并且想要在JVM上使用类似的语言,那么Clojure最适合你。它可能是运行在JVM上最函数式的语言,当然也是最著名的一个。另外,它比其他Lisp语系的语言更加强调不变性,这使得它更加能赢得函数式语言狂热者的心。

Scala是一门完全面向对象的语言,其面向对象的程度超过了Java。Scala具有可用于非研究型语言之上最高级的类型系统之一,当然也是运行在在JVM之上最高级的类型系统。它在没有破坏面向对象的前提下,还结合了许多函数式语言的概念和特征,但是它对函数式语言特征的折衷,使其损失了一些函数式语言的狂热者。

Groovy在流行的web框架Grails中有不错的应用。它还应用在Gradle构建系统中,Gradle正在成为Maven的替代者。我个人认为相比于其他两门语言,Groovy是一门功能受限的语言,尤其随着Jython和JRuby开始侵占JVM领地。

Clojure,即使对一些非常有趣的特征打了折扣,但其凭借是运行在JVM上的Lisp语系这一点,仍然具有很强的吸引力。它的流行度可能会受到限制,但是我预计在很长一段时间里都会有忠诚的社区围绕着它。

Scala可以直接和Java竞争,并且在几乎所有方面都对Java构成了挑战。当然目前它还无法挑战Java的流行度,另外它缺少一个强大的公司支持,这可能会阻碍其在企业环境的应用。从语言进化的意义上来说,Scala也是一门比Java更加动态的语言。站在语言的角度,这是一件好事。但是站在那些计划使用Scala写数千行代码的用户角度,这就不是什么好事了。

最后我要说的是,我非常熟悉Scala,但是仅仅了解另外两门语言。

参考资料

本文译自Scala vs. Groovy vs. Clojure

发表评论

电子邮件地址不会被公开。 必填项已用*标注