Scala vs. Groovy vs. Clojure

Scala vs. Groovy vs. Clojure

有人能解释一下scala、groovy和clojure之间的主要区别吗?我知道这些编译器中的每一个都可以在JVM上运行,但是我希望对它们进行简单的比较。


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更具活力的语言。从语言的角度来看,这是件好事。从计划在其中编写数千行代码的用户的角度来看,并非如此。

作为最后的披露,我非常熟悉斯卡拉,只熟悉其他两个。


斯卡拉

Scala是由一种称为漏斗的纯函数语言演化而来的,它代表了几乎所有Java语法的一个无尘室实现,只是在一个清晰的改进或是它会损害语言的功能性质的地方有所不同。这种差异包括单例对象而不是静态方法,以及类型推断。

其中很大一部分是基于马丁·奥德斯基之前对披萨语言的研究。OO/FP集成远远超出了闭包的范围,并导致将该语言描述为后功能语言。

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

格罗维

Groovy明确地处理了两个Java最大的批评

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

它可能在语法上与Java最接近,不提供Culjule和Scala提供的一些更丰富的功能结构,但仍然提供了明确的进化改进——尤其是编写脚本Syle程序。

groovy拥有三种语言中最强大的商业支持,主要是通过SpringSource。

克洛杰尔

Clojure是Lisp家族中的一种功能语言,它也是动态类型的。

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

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

我还得透露我最熟悉斯卡拉:)


我从来没有时间和Clojure玩过。但对于scala和groovy来说,这是james strachan的话-groovy的创造者

"Though my tip though for the long term replacement of javac is Scala.
I'm very impressed with it! I can honestly say if someone had shown me
the Programming in Scala book by Martin Odersky, Lex Spoon & Bill
Venners back in 2003 I'd probably have never created Groovy."

你可以在这里读整个故事


它们可以区别于它们来自何处,或者主要针对哪些开发人员。

Groovy有点像Java的脚本版本。长期以来,Java程序员在构建由大型架构支持的敏捷应用程序时会感到宾至如归。顾名思义,Grails上的groovy类似于Rails框架。对于那些不想一直困扰Java的人来说。

scala是一种面向对象的函数式编程语言,Ruby或Python程序员可能会觉得更接近这一语言。它使用了在这些编程语言中发现的许多常见的好主意。

Clojure是Lisp编程语言的一种方言,因此Lisp、Scheme或Haskell开发人员在使用该语言进行开发时可能会感到宾至如归。


我正在阅读实用程序员的书"Groovy配方:润滑Java的车轮"的Scott Davis,版权2008,并于同年四月打印。

这有点过时了,但这本书清楚地说明Groovy简直就是Java的扩展。我可以编写Java代码,它的功能与Java完全一样,并重命名文件*.Groovy,它工作正常。根据这本书的说法,如果我包括必要的图书馆,情况就会相反。到目前为止,实验似乎证明了这一点。


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

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