Scala、Groovy和Clojure

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

179305 次浏览

它们可以根据它们来自哪里或主要针对哪些开发者进行区分。

Groovy有点像Java的脚本版本。长期从事Java编程的程序员在构建由大型体系结构支持的敏捷应用程序时感到很自在。Groovy on Grails,顾名思义,类似于Rails框架。适合那些不想一直为Java的冗长而烦恼的人。

Scala是一种面向对象的函数式编程语言,Ruby或Python程序员可能更喜欢这种语言。它采用了很多在这些编程语言中常见的好思想。

Clojure是Lisp编程语言的一种方言,所以Lisp、Scheme或Haskell开发人员在使用这种语言进行开发时可能会感到很自在。

显然,语法是完全不同的(Groovy最接近Java),但我认为这不是您想要的。

如果您有兴趣使用它们来编写Java应用程序的脚本,那么Scala可能不是一个好的选择,因为Java中有没有简单的评估方法,而Groovy特别适合这个目的。

Groovy是一种动态类型语言,它的语法非常接近Java,有许多语法改进,可以简化代码,减少样板文件。它可以通过解释器运行,也可以被编译,这使得它非常适合快速创建原型、编写脚本和学习动态语言,而无需学习新的语法(假设您了解Java)。从Groovy 2.0开始,对静态编译的支持也越来越多。Groovy支持闭包,并支持某种函数式风格的编程,尽管它与函数式编程的传统定义还相去甚远。

Clojure是Lisp的一种方言,具有一些像软件事务内存这样的高级特性。如果你喜欢Lisp,并且想在JVM下使用类似的东西,Clojure就是为你准备的。它可能是JVM上运行最多的函数式语言,当然也是最有名的一个。此外,它比其他Lisp方言更强调不变性,这使它更接近函数式语言爱好者的心。

Scala是一种完全面向对象的语言,与Java相比更是如此,它是非研究语言中最先进的类型系统之一,当然也是JVM中最先进的类型系统。它还结合了函数式语言的许多概念和特性,而不损害面向对象,但它在函数式语言特性上的妥协使后者的一些爱好者望而却步。

Groovy在Grails中有很好的接受度和一个流行的web框架。它还支持Gradle构建系统,该系统正在成为Maven的流行替代品。我个人认为,与其他语言相比,它是一种实用性有限的语言,特别是当Jython和JRuby开始进军jvm领域时。

Clojure,即使不考虑一些非常有趣的特性,仅作为JVM上的Lisp方言就具有强大的吸引力。当然,这可能会限制它的受欢迎程度,但我预计它将在很长一段时间内拥有忠实的社区。

Scala可以直接与Java竞争,并且在几乎所有方面都与Java竞争。当然,目前它在受欢迎程度上无法与之竞争,而且缺乏强大的企业支持可能会阻碍它在企业环境中的接受度。就语言的演变而言,它也是一种比Java更加动态的语言。从语言的角度来看,这是一件好事。从用户的角度来看,他们计划在其中编写数千行代码,但事实并非如此。

最后一点,我非常熟悉Scala,而且只熟悉另外两种。

Scala

Scala是从一种被称为漏斗的纯函数式语言演变而来的,它代表了几乎所有Java语法的完全实现,区别只是在哪些地方可以进行明显的改进,或者在哪些地方会损害语言的函数式本质。这些区别包括单例对象而不是静态方法,以及类型推断。

大部分内容都是基于Martin Odersky之前使用披萨语言所做的工作。OO/FP的集成远远超出了闭包的范畴,并导致该语言被描述为后函数式语言。

尽管如此,它在许多方面都是最接近Java的。主要是由于OO支持和静态类型的结合,但也由于语言设计中明确的目标,即它应该与Java紧密集成。

Groovy

Groovy明确地解决了Java的两个最大的批评

  • 是动态类型的,这删除了大量的样板文件和
  • 向语言中添加闭包。

语法可能是最接近Java的,没有提供Clojure和Scala所提供的一些更丰富的函数结构,但仍然提供了明显的改进——特别是对于编写脚本类型的程序。

Groovy在这三种语言中拥有最强大的商业支持,主要是通过springsource。

Clojure

Clojure是LISP家族中的一种函数式语言,它也是动态类型的。

STM支持等特性为它提供了一些最好的开箱即用的并发支持,而Scala需要第三方库(如Akka)来复制这一点。

从语法上讲,它也是三种语言中与典型Java代码距离最远的语言。

我还必须透露,我最熟悉的是Scala:)

我正在阅读实用程序员的书“Groovy Recipes: Greasing the wheels of Java”,作者Scott Davis,版权所有,2008年4月出版。

这有点过时了,但这本书清楚地表明,Groovy实际上是Java的扩展。我可以编写功能与Java完全相同的Java代码,并将文件重命名为*。Groovy,它工作得很好。根据这本书,如果我包括必要的图书馆,情况则相反。到目前为止,实验似乎证实了这一点。

我从来没有时间玩clojure。但是对于scala和groovy,这是来自groovy创建者James Strachan的话

虽然我的建议是,从长远来看,javac的替代品是Scala。 我对它印象深刻!老实说,如果有人给我看过的话 Martin Odersky, Lex Spoon &比尔 回到2003年,我可能从未创建过Groovy。" < / p >

你可以阅读整个故事在这里