表面上看,Groovy和Scala看起来很相似,除了Scala是静态类型的,还有Groovy动态.
其他主要差异和优势是什么?
他们真的有多相似?
这两者之间有竞争吗?
如果是这样,你认为从长远来看谁会赢?
James Iry.. 228
它们都是具有lambda和闭包并与Java互操作的JVM的面向对象语言.除此之外,他们是非常不同的.
Groovy是一种"动态"语言,不仅意味着它是动态类型的,而且它支持动态元编程.
Scala是一种"静态"语言,因为它是静态类型的,并且几乎没有动态元编程,除了你可以用Java做的尴尬的东西.注意,Scala的静态类型系统比Java更加统一和复杂.
Groovy在语法上受Java的影响,但在语义上受Ruby等语言的影响更大.
Scala在语法上受Ruby和Java的影响.它在语义上更受Java,SML,Haskell以及一种名为gBeta的非常模糊的OO语言的影响.
由于处理Java重载的方式,Groovy有"意外"多次调度.
Scala只是单一调度,但具有SML启发模式匹配,以处理多个调度要处理的一些相同类型的问题.但是,在多个调度只能在运行时类型上调度的情况下,Scala的模式匹配可以在运行时类型,值或两者上进行调度.模式匹配还包括语法上令人愉快的变量绑定.很难过分强调这个单独的功能在Scala中进行编程是多么令人愉快.
Scala和Groovy都支持mixins的多重继承形式(尽管Scala称它们为traits).
Scala支持部分函数应用和语言级别的currying,Groovy有一个笨拙的"curry"方法来进行部分函数应用.
Scala确实指导尾递归优化.我不相信Groovy会这样做.这在函数式编程中很重要,但在命令式编程中却不那么重要.
默认情况下,急切地评估Scala和Groovy.但是,Scala支持按名称调用参数.Groovy没有 - 按名称调用必须使用闭包进行模拟.
Scala具有"for comprehension",这是对其他语言中列表推导的概括(从技术上讲,它们是monad理解加上一点 - 介于Haskell的do和C#的LINQ之间).
Scala没有"静态"字段,内部类,方法等的概念 - 它使用单例对象.Groovy使用静态概念.
Scala没有像Groovy那样内置算术运算符.在Scala中,您可以非常灵活地命名方法.
Groovy有elvis操作符来处理null.Scala程序员更喜欢使用Option类型来使用null,但如果你愿意,可以很容易地在Scala中编写elvis操作符.
最后,有谎言,有该死的谎言,然后有基准.计算机语言基准测试游戏将Scala排在介于比Groovy快得多的速度之间(速度从两倍到93倍不等),同时保留大致相同的源大小.基准.
我敢肯定,我还没有涉及很多很多不同之处.但希望这给你一个要点.
他们之间有竞争吗?是的,当然,但没有你想象的那么多.Groovy真正的竞争对手是JRuby和Jython.
谁会赢?我的水晶球像其他任何人一样破裂.
它们都是具有lambda和闭包并与Java互操作的JVM的面向对象语言.除此之外,他们是非常不同的.
Groovy是一种"动态"语言,不仅意味着它是动态类型的,而且它支持动态元编程.
Scala是一种"静态"语言,因为它是静态类型的,并且几乎没有动态元编程,除了你可以用Java做的尴尬的东西.注意,Scala的静态类型系统比Java更加统一和复杂.
Groovy在语法上受Java的影响,但在语义上受Ruby等语言的影响更大.
Scala在语法上受Ruby和Java的影响.它在语义上更受Java,SML,Haskell以及一种名为gBeta的非常模糊的OO语言的影响.
由于处理Java重载的方式,Groovy有"意外"多次调度.
Scala只是单一调度,但具有SML启发模式匹配,以处理多个调度要处理的一些相同类型的问题.但是,在多个调度只能在运行时类型上调度的情况下,Scala的模式匹配可以在运行时类型,值或两者上进行调度.模式匹配还包括语法上令人愉快的变量绑定.很难过分强调这个单独的功能在Scala中进行编程是多么令人愉快.
Scala和Groovy都支持mixins的多重继承形式(尽管Scala称它们为traits).
Scala支持部分函数应用和语言级别的currying,Groovy有一个笨拙的"curry"方法来进行部分函数应用.
Scala确实指导尾递归优化.我不相信Groovy会这样做.这在函数式编程中很重要,但在命令式编程中却不那么重要.
默认情况下,急切地评估Scala和Groovy.但是,Scala支持按名称调用参数.Groovy没有 - 按名称调用必须使用闭包进行模拟.
Scala具有"for comprehension",这是对其他语言中列表推导的概括(从技术上讲,它们是monad理解加上一点 - 介于Haskell的do和C#的LINQ之间).
Scala没有"静态"字段,内部类,方法等的概念 - 它使用单例对象.Groovy使用静态概念.
Scala没有像Groovy那样内置算术运算符.在Scala中,您可以非常灵活地命名方法.
Groovy有elvis操作符来处理null.Scala程序员更喜欢使用Option类型来使用null,但如果你愿意,可以很容易地在Scala中编写elvis操作符.
最后,有谎言,有该死的谎言,然后有基准.计算机语言基准测试游戏将Scala排在介于比Groovy快得多的速度之间(速度从两倍到93倍不等),同时保留大致相同的源大小.基准.
我敢肯定,我还没有涉及很多很多不同之处.但希望这给你一个要点.
他们之间有竞争吗?是的,当然,但没有你想象的那么多.Groovy真正的竞争对手是JRuby和Jython.
谁会赢?我的水晶球像其他任何人一样破裂.
scala旨在成为一种oo /功能混合语言,并且计划和设计得非常好.groovy更像是一组很多人都喜欢在java中使用的增强功能.我仔细看了两下,所以我可以告诉:)
它们都不比另一个好或坏.groovy非常擅长元编程,scala非常擅长所有不需要元编程的东西,所以...我倾向于使用两者.
Scala有Actors,它使并发更容易实现.和特征给出真正的,类型安全的多重继承.
你通过静态和动态打字击中了头部的钉子.两者都是新一代动态语言的一部分,包括闭包,lambda表达式等.两者之间也有一些语法差异,但从功能上来说,我看不出Groovy和Scala之间存在巨大差异.
Scala实现Lists有点不同; 在Groovy中,几乎所有东西都是java.util.List的实例,而Scala使用Lists和原始数组.Groovy(我认为)有更好的字符串插值.
看起来Scala速度更快,但是Groovy的人们真的在推动2.0版本的性能.1.6在1.5系列赛上的速度有了很大的飞跃.
我认为这两种语言都不会真正"赢",因为它们针对两类不同的问题.Scala是一种非常类似Java的高性能语言,没有与Java完全相同的样板级别.Groovy用于快速原型设计和开发,其速度不如程序员实现代码所需的时间重要.
Scala的学习曲线比Groovy要陡峭得多.Scala通过模式匹配和基于尾部的递归对函数式编程提供了更多支持,这意味着更多纯FP工具.