当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Scala和Groovy之间的主要区别是什么?》经验,为你挑选了5个好方法。

表面上看,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.

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



1> James Iry..:

它们都是具有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.

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


如果一个人可以让大学开始教这些语言而不仅仅是java =,那将是双赢的.
不可变性不是Scala的关键特征吗?并发和演员怎么样?告诉我们更多......
由于这个答案有这么多的选票,我想纠正一个部分.在Groovy中基于继承的多方法开始是偶然的,但是在Groovy开发者大会上,包括James,在Groovy 1.0之前我们决定保留它.改变这一点并不困难.另外,詹姆斯写的内容...... invokedynamic取消了他所谈论的障碍
如果有任何竞争,那将是Clojure,但Clojure对竞争不感兴趣.
鉴于Scala使用相同的静态类型方法调度作为java(热点可以轻松内联)和groovy动态方法调度它将非常难以让Groovy接近Scala的性能.特别是使用@specialised优化java的自动装箱,Scala有时比java更快.然而,Groovy的用例类似于使用Ruby/Python - 它是一种易于使用的动态类型脚本语言,其中性能通常不是很大的问题.例如,许多Groovy框架包含大量用于性能的Java代码(如Grails)

2> 小智..:

scala旨在成为一种oo /功能混合语言,并且计划和设计得非常好.groovy更像是一组很多人都喜欢在java中使用的增强功能.我仔细看了两下,所以我可以告诉:)

它们都不比另一个好或坏.groovy非常擅长元编程,scala非常擅长所有不需要元编程的东西,所以...我倾向于使用两者.



3> jasonnerothi..:

Scala有Actors,它使并发更容易实现.和特征给出真正的,类型安全的多重继承.


为了将来参考,Groovy也可以通过GPars或Akka进行参考.
为了将来的参考,Groovy通过特征也是如此

4> Don Werve..:

你通过静态和动态打字击中了头部的钉子.两者都是新一代动态语言的一部分,包括闭包,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用于快速原型设计和开发" - 这表明Groovy不适合我不同意的生产用途.例如,生产中使用了很多Grails站点
"Groovy(我认为)有更好的字符串插值." - 使用Scala-2.10.0,这已不再适用(Scala得到了很酷的字符串插值).

5> More Than Fi..:

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

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有