676

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

4

6 回答 6

872

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 非常熟悉,并且只熟悉其他两个。

于 2009-08-22T02:39:22.560 回答
219

斯卡拉

Scala 是从一种称为Funnel的纯函数式语言演变而来的,它代表了几乎所有 Java 语法的洁净室实现,不同之处仅在于可以进行明显改进或会损害语言的功能性质的地方。这些差异包括单例对象而不是静态方法,以及类型推断。

其中大部分是基于 Martin Odersky 之前在Pizza语言方面的工作。OO/FP 集成远远超出了单纯的闭包,并导致该语言被描述为后功能。

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

时髦的

Groovy 通过以下方式明确解决了 Java 的两个最大批评:

  • 是动态类型的,这消除了很多样板和
  • 为语言添加闭包。

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

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

Clojure

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

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

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

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

于 2010-09-16T22:01:55.123 回答
68

我从来没有时间玩clojure。但是对于 scala 与 groovy,这是 James Strachan 的话——Groovy 的创造者

“虽然我对 javac 的长期替代建议是 Scala。我对它印象深刻!老实说,如果有人在 2003 年向我展示了 Martin Odersky、Lex Spoon 和 Bill Venners 的《Scala 编程》一书,我可能从未创建过 Groovy。”

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

于 2012-04-03T13:59:09.970 回答
30

他们可以通过他们来自哪里或他们主要针对哪些开发人员来区分。

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

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

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

于 2009-08-22T00:30:07.550 回答
8

我正在阅读 Scott Davis 所著的 Pragmatic Programmers 书“Groovy Recipes:润滑 Java 的轮子”,版权所有,2008 年,同年 4 月印刷。

它有点过时了,但是这本书清楚地表明 Groovy 确实是 Java 的扩展。我可以编写功能与 Java 完全相同的 Java 代码,并将文件重命名为 *.groovy,它工作正常。根据这本书,如果我包含必要的库,则相反。到目前为止,实验似乎证实了这一点。

于 2011-11-18T19:18:54.130 回答
4

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

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

于 2009-08-22T00:33:00.157 回答