有人可以解释一下 Scala、Groovy 和 Clojure 之间的主要区别吗?我知道这些编译中的每一个都可以在 JVM 上运行,但我想对它们进行简单的比较。
6 回答
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 非常熟悉,并且只熟悉其他两个。
斯卡拉
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 :)
我从来没有时间玩clojure。但是对于 scala 与 groovy,这是 James Strachan 的话——Groovy 的创造者
“虽然我对 javac 的长期替代建议是 Scala。我对它印象深刻!老实说,如果有人在 2003 年向我展示了 Martin Odersky、Lex Spoon 和 Bill Venners 的《Scala 编程》一书,我可能从未创建过 Groovy。”
你可以在这里阅读整个故事
他们可以通过他们来自哪里或他们主要针对哪些开发人员来区分。
Groovy有点像 Java 的脚本版本。长期以来,Java 程序员在构建由大型架构支持的敏捷应用程序时会感到宾至如归。顾名思义,Grails 上的 Groovy 类似于 Rails 框架。对于那些不想一直为 Java 的冗长而烦恼的人。
Scala是一种面向对象的函数式编程语言,Ruby 或 Python 程序员可能会觉得更接近这一语言。它采用了在这些编程语言中发现的很多常见的好想法。
Clojure是 Lisp 编程语言的一种方言,因此 Lisp、Scheme 或 Haskell 开发人员在使用这种语言进行开发时可能会感到宾至如归。
我正在阅读 Scott Davis 所著的 Pragmatic Programmers 书“Groovy Recipes:润滑 Java 的轮子”,版权所有,2008 年,同年 4 月印刷。
它有点过时了,但是这本书清楚地表明 Groovy 确实是 Java 的扩展。我可以编写功能与 Java 完全相同的 Java 代码,并将文件重命名为 *.groovy,它工作正常。根据这本书,如果我包含必要的库,则相反。到目前为止,实验似乎证实了这一点。
显然,语法完全不同(Groovy 最接近 Java),但我想这不是您所要求的。
如果您有兴趣使用它们编写 Java 应用程序的脚本,那么 Scala 可能不是一个好的选择,因为没有简单的方法可以从 Java 中评估它,而 Groovy 尤其适合此目的。