scala - Scala 和 Groovy 之间的主要区别是什么?

scala - Scala 和 Groovy 之间的主要区别是什么?

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

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

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

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

Scala 在语法上受到 Ruby 和 Java 的影响。它在语义上更多地受到 Java、SML、Haskell 和一种非常晦涩的 OO 语言(称为 gBeta)的影响。

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

Scala 只是单一调度,但具有受 SML 启发的模式匹配来处理一些与多调度旨在处理的相同类型的问题。然而,多重分派只能在运行时类型上分派,Scala 的模式匹配可以在运行时类型、值或两者上分派。模式匹配还包括语法上令人愉悦的变量绑定。很难过分强调这个单一特性使 Scala 编程变得多么令人愉快。

Scala 和 Groovy 都支持一种带有 mixin 的多重继承形式(尽管 Scala 称它们为特征)。

Scala 在语言级别支持偏函数应用和柯里化,Groovy 有一个笨拙的“柯里”方法来做偏函数应用。

Scala 直接进行尾递归优化。我不相信 Groovy 会这样做。这在函数式编程中很重要,但在命令式编程中不太重要。

默认情况下,Scala 和 Groovy 都被热切地评估。但是,Scala 支持按名称调用参数。Groovy 没有 - 必须使用闭包来模拟名称调用。

Scala 有“for comprehensions”,它是在其他语言中发现的列表理解的泛化(从技术上讲,它们是 monad 理解加上一点——介于 Haskell 的 do 和 C# 的 LINQ 之间)。

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

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

Groovy 有用于处理 null 的 elvis 运算符。Scala 程序员更喜欢使用 Option 类型而不是使用 null,但是如果您愿意,可以很容易地在 Scala 中编写一个 elvis 运算符。

最后,有谎言,有该死的谎言,然后是基准。计算机语言基准测试游戏将 Scala 评为比 Groovy 快得多(速度从两倍到 93 倍不等),同时保持大致相同的源大小。基准。

我确信有很多很多我没有涵盖的差异。但希望这能给你一个要点。

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

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

相关推荐

嘻哈包袱铺入驻邯郸!五一爆笑开演
365足球外围网站官网

嘻哈包袱铺入驻邯郸!五一爆笑开演

🕒 08-11 👁️ 4112
炉石传说比赛视频哪里看?精彩对决不容错过!
365bet提款维护

炉石传说比赛视频哪里看?精彩对决不容错过!

🕒 07-09 👁️ 4991
cmd下重启、注销、休眠、关机
365bet提款维护

cmd下重启、注销、休眠、关机

🕒 08-03 👁️ 2460