协慌网

登录 贡献 社区

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

斯卡拉

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

其中大部分是基于马丁 · 奥德斯基(Martin Odersky)之前使用披萨(Pizza)语言编写的。 OO / FP 集成远远超出了单纯的闭包,并且导致该语言被描述为后功能。

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

Groovy

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

  • 被动态键入,这消除了很多样板和
  • 在语言中添加闭包。

它在语法上可能最接近 Java,没有提供 Clojure 和 Scala 提供的一些更丰富的功能构造,但仍然提供了确定的进化改进 - 特别是对于编写脚本程序程序。

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

Clojure

Clojure 是 LISP 家族中的一种功能语言,它也是动态输入的。

诸如 STM 支持之类的功能为其提供了一些最好的现成并发支持,而 Scala 需要Akka 之类的第三方库来复制它。

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

我还必须透露我最了解 Scala :)

我从来没有时间玩 Clojure。但是对于 scala vs groovy,这是 James Strachan 的话 - Groovy 创作者

“尽管我对长期替换 Javac 的提示是 Scala。它给我留下了深刻的印象!我可以坦白地说,如果有人在 2003 年向我展示了 Martin Odersky,Lex Spoon 和 Bill Venners 编写的《 Scala 编程》一书,可能从未创建过 Groovy。”

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