Scala 和 Groovy 的主要区别是什么?

在表面上,Groovy 和 Scala 看起来非常相似,只不过 Scala 是静态类型的,而 Groovy 是动态的。

  • 还有什么其他的关键区别,和优势,每个人都比其他人?
  • 他们到底有多相似?
  • 这两者之间存在竞争吗?
    • 如果是这样,你认为从长远来看谁会赢?
56026 次浏览

静态和动态输入已经说到点子上了。它们都是新一代动态语言的一部分,包括闭包、 lambda 表达式等等。这两者之间也有一些语法上的差异,但是在功能上,我并没有看到 Groovy 和 Scala 之间的巨大差异。

Scala 实现 List 的方式略有不同; 在 Groovy 中,几乎所有东西都是 java.util 的实例。List,而 Scala 同时使用 List 和基元数组。Groovy 有(我认为)更好的字符串插值。

Scala 看起来更快,但是 Groovy 的人确实在推动2.0版本的性能。1.6版的速度比1.5版快了一大截。

我认为这两种语言都不会真正“赢”,因为它们针对的是两类不同的问题。Scala 是一种非常类 Java 的高性能语言,没有与 Java 完全相同的样板文件级别。对于快速成型和开发来说,速度不如程序员实现代码所需的时间重要。

它们都是 JVM 的面向对象语言,具有 lambdas 和闭包,并与 Java 互操作。除此之外,他们完全不同。

Groovy 是一种“动态”语言,不仅因为它是动态类型化的,而且因为它支持动态元编程。

Scala 是一种“静态”语言,因为它是静态类型的,除了在 Java 中可以做的笨拙的事情之外,实际上没有任何动态元编程。注意,Scala 的静态类型系统实质上比 Java 的更加统一和复杂。

Groovy 在语法上受 Java 的影响,但在语义上受 Ruby 等语言的影响更大。

Scala 在语法上同时受到 Ruby 和 Java 的影响。它在语义上更多地受到 Java、 SML、 Haskell 和一种非常晦涩的面向对象语言 gBeta 的影响。

由于处理 Java 重载的方式,Groovy 有“意外”多分派。

Scala 只是一个单一的分派,但是受到了 SML 的启发,模式匹配处理了一些多分派应该处理的问题。然而,在多分派只能分派运行时类型的情况下,Scala 的模式匹配可以分派运行时类型、值,或者两者兼而有之。模式匹配还包括语法上令人愉快的变量绑定。单单这个特性就让 Scala 的编程变得如此令人愉悦,再怎么强调也不为过。

Scala 和 Groovy 都支持一种形式的混合多重继承(尽管 Scala 称之为 trait)。

Scala 支持部分函数应用程序和语言级的局部套用,Groovy 有一个笨拙的“局部套用”方法来处理部分函数应用程序。

Scala 可以直接进行尾部递归优化。我觉得 Groovy 不知道。这在函数式编程中很重要,但在命令式编程中就不那么重要了。

缺省情况下,Scala 和 Groovy 都会被热切地计算。但是,Scala 支持按名称调用参数。Groovy does not-call-by-name 必须用闭包来模拟。

Scala 有一个“ for  谓”,它是其他语言中列表理解的一种推广(从技术上讲,它们是单子理解加上一点——介于 Haskell 的 do 和 C # 的 LINQ 之间)。

Scala 没有“静态”字段、内部类、方法等概念,而是使用单例对象。Groovy 使用静态概念。

Scala 没有像 Groovy 那样内置算术运算符的选择。在 Scala 中,你可以非常灵活地命名方法。

Groovy 使用 Elvis 操作符来处理 null。比起使用 null,Scala 程序员更喜欢使用 Option 类型,但是如果愿意的话,用 Scala 编写一个 elvis 操作符也很容易。

最后,有谎言,有该死的谎言,还有基准。在计算机语言基准测试游戏中,Scala 的速度比 Groovy 快得多(从两倍到93倍不等) ,而且保持了大致相同的源代码大小。基准.

我肯定还有很多很多我没有涉及到的不同之处,但是希望这能给你一个大致的概念。

他们之间有竞争吗?是的,当然,但不像你想的那么多。Groovy 真正的竞争对手是 JRuby 和 Jython。

谁会赢? 我的水晶球和其他人的一样破了。

Scala 有 Actors,它使并发更容易实现,还有 Traits,它给出了真正的、类型安全的多重继承。

Scala 是一种 OO/函数混合语言,是 非常精心策划和设计的。Groovy 更像是一组许多人喜欢在 Java 中使用的增强。 我仔细看了看,所以我可以说:)

他们两个都不比对方好或不好。Groovy 非常擅长元编程 Scala 非常擅长所有不需要元编程的东西,所以... 我倾向于两者都用。

Scala 的学习曲线比 Groovy 要陡峭得多。Scala 对基于模式匹配和尾部的递归的函数式编程有更多的支持,这意味着更多的工具适用于纯 FP。

Scala 也有动态编译功能,我是用 twitter eval lib (https://github.com/twitter/util)完成的。我将 scala 代码保存在一个平面文件中(没有任何扩展) ,并在运行时使用 eval 创建的 scala 类。 我认为 Scala 是元编程,具有动态复杂性的特点