Scala和Groovy的主要区别是什么?
表面上Groovy和Scala看起来非常相似,除了Scala是静态types的,Groovy是dynamic的。
- 其他的主要区别是什么,各有什么优势?
- 他们真的有多相似?
- 两者之间有没有竞争?
- 如果是这样,你认为谁会赢得长远的胜利?
它们都是JVM的面向对象语言,它们都有lambdaexpression式和闭包,并与Java进行互操作。 除此之外,他们是非常不同的。
Groovy是一种“dynamic”语言,不仅是dynamictypes化的,而且还支持dynamic元编程。
Scala是一种“静态”语言,因为它是静态types的,并且几乎没有dynamic元编程超出了你在Java中可以做的尴尬的事情。 请注意,Scala的静态types系统比Java更加统一和复杂。
Groovy在语法上受到Java的影响,但语义影响更多的是像Ruby这样的语言。
Scala在语法上受Ruby和Java的影响。 它在语义上受到Java,SML,Haskell和一个非常模糊的OO语言gBeta的影响。
由于它处理Java重载的方式,Groovy有“意外”的多重分派。
Scala只是单个调度,但是具有SML启发的模式匹配来处理多个调度要处理的一些相同types的问题。 但是,在多个分派只能在运行时types上分派的情况下,Scala的模式匹配可以在运行时types,值或两者上分派。 模式匹配还包括语法愉快的variables绑定。 在Scala中编写这个单一function令人愉快。
Scala和Groovy都支持带有mixin的多重inheritanceforms(尽pipeScala称之为特性)。
Scala既支持部分function应用,也支持语言层面的操作,Groovy在部分function应用上有一个尴尬的“咖喱”方法。
斯卡拉直接的尾recursion优化。 我不相信Groovy。 这在函数式编程中很重要,但是在命令式编程中却不那么重要。
Scala和Groovy默认都是热切的评估。 但是,Scala支持按名称参数。 Groovy没有 – 必须通过closures模拟名称。
斯卡拉有“理解”,在其他语言中发现的列表parsing的概括(从技术上讲,他们是monad的理解加上一点 – Haskell的做和C#的LINQ之间的某处)。
Scala没有“静态”字段,内部类,方法等概念 – 它使用单例对象。 Groovy使用静态的概念。
Scala并没有像Groovy那样内置算术运算符。 在斯卡拉你可以非常灵活地命名方法。
Groovy拥有用于处理null的elvis操作符。 Scala程序员更喜欢使用Optiontypes来使用null,但是如果你愿意的话,在Scala中编写一个elvis操作符是很容易的。
最后,有谎言,有该死的谎言,然后有基准。 计算机语言基准游戏将Scala评为在比Groovy快两倍到93倍之间,同时保持大致相同的源代码大小。 基准 。
我敢肯定,我还没有涉及到很多很多的差异。 但希望这给你一个主意。
他们之间有竞争吗? 是的,当然,但不如你想象的那么多。 Groovy真正的竞争是JRuby和Jython。
谁会赢? 我的水晶球和其他人一样破裂。
Scala有Actor,这使得并发更容易实现。 和真正的,types安全的多重inheritance的特质。
斯卡拉是一个oo /function混合语言,是非常好的规划和devise。 groovy更像是一组增强function,很多人都喜欢在java中使用。 我仔细看了两个,所以我可以告诉:)
没有一个比另一个好或者差。 groovy非常擅长元编程,scala非常擅长所有不需要元编程的东西,所以…我倾向于同时使用。
你已经用静态和dynamictypes打了个头。 两者都是新一代dynamic语言的一部分,包括闭包,lambdaexpression式等等。 两者之间也有一些语法差异,但从function上来说,Groovy和Scala没有太大差别。
斯卡拉实现列表有点不同; 在Groovy中,几乎所有东西都是java.util.List的一个实例,而Scala使用了列表和基本数组。 Groovy有(我认为)更好的string插值。
Scala似乎更快,但是Groovy人真的推动2.0版本的性能。 1.6的速度在1.5系列上有了巨大的飞跃。
我不认为任何一种语言都会真正“赢”,因为它们针对两类不同的问题。 Scala是一种非常类似于Java的高性能语言,没有像Java那样具有相同级别的样板。 Groovy用于快速原型开发,其速度不如程序员实现代码所花费的时间。
我们已经广泛地使用了Groovy,可以自信地说,它在开发生产质量的Web应用程序方面非常出色,而不仅仅是用于原型开发。 这是非常容易使用,并允许快速开发,以至于很难从我的经验中消除开发人员从Groovy计划Java使用一段时间之后。
我没有使用Scala,所以不能多说。
Scala的学习曲线比Groovy更加陡峭。 Scala通过模式匹配和基于尾部recursion的方式对函数式编程提供了更多的支持,这意味着更多的纯FP工具。
斯卡拉也有dynamics编译,我已经做了使用twitter eval lib( https://github.com/twitter/util )。 我将scala代码放在一个平面文件中(没有任何扩展名),并在运行时使用eval创build的scala类。 我会说斯卡拉是元编程,并具有dynamic复杂的function