scala优势 - groovy知乎



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

表面上Groovy和Scala看起来非常相似,除了Scala是静态类型的,Groovy是动态的。

  • 其他关键差异和优势各有哪些?
  • 他们真的有多相似?
  • 两者之间是否存在竞争?
    • 如果是这样,你认为谁会长期获胜?

Scala拥有Actor,这使得并发更容易实现。 这些特性赋予了真正的类型安全的多重继承。


Scala的学习曲线比Groovy更加陡峭。 Scala通过模式匹配和基于尾部递归的方式对函数式编程提供了更多的支持,这意味着更多纯FP的工具。


你已经用静态和动态打字的方式击中了头部。 两者都是新一代动态语言的一部分,包括闭包,lambda表达式等等。 两者之间也有一些语法差异,但从功能上来说,我没有看到Groovy和Scala之间的巨大差异。

Scala实现列表有点不同; 在Groovy中,几乎所有东西都是java.util.List的一个实例,而Scala使用了列表和原始数组。 Groovy有(我认为)更好的字符串插值。

Scala看起来速度更快,但Groovy人真的推动2.0版本的性能。 1.6速度在1.5系列上有了飞跃。

我不认为任何一种语言都会真正“赢”,因为他们针对两类不同的问题。 Scala是一种非常类似Java的高性能语言,没有与Java相同的样板级别。 Groovy用于快速原型开发和开发,速度不如程序员实现代码所花的时间。


它们都是JVM的面向对象语言,它们具有lambda表达式和闭包,并与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在部分功能应用方面有一种尴尬的“咖喱”方法。

斯卡拉直接进行尾部递归优化。 我不相信Groovy。 这在函数式编程中很重要,但在命令式编程中不那么重要。

默认情况下,Scala和Groovy都受到热切的评估。 但是,Scala支持按名称参数。 Groovy不会 - 必须通过关闭模拟名称。

Scala具有“理解”,这是对其他语言中的列表解析的推广(从技术上讲,它们是monad理解加上一点 - 在Haskell的do和C#的LINQ之间的某处)。

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

Scala没有像Groovy那样内置算术运算符。 在斯卡拉你可以非常灵活地命名方法。

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

最后,有谎言,有该死的谎言,然后有基准。 计算机语言基准游戏将Scala评为介于比Groovy快两倍之间(从两倍到93倍的速度),同时保持大致相同的源代码大小。 benchmarks

我敢肯定,我还没有涉及到很多很多的差异。 但希望这给你一个主意。

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

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


斯卡拉也有dynamical编译,我已经使用twitter eval lib( https://github.com/twitter/util )来完成它。 我将scala代码放在一个平面文件中(没有任何扩展名),并在运行时使用eval创建的scala类。 我会说斯卡拉是元编程,并具有动态复杂的功能





groovy