首页 文章

Scala vs. Groovy vs. Clojure [已结束]

提问于
浏览
676

有人可以解释Scala,Groovy和Clojure之间的主要区别 . 我知道这些编译中的每一个都在JVM上运行,但我想在它们之间进行简单的比较 .

6 回答

  • 30

    斯卡拉

    Scala是从一种称为Funnel的纯函数式语言演化而来,代表了几乎所有Java语法的洁净室实现,只有在可以进行明显改进或者会损害语言功能性的地方才有所不同 . 这些差异包括单例对象而不是静态方法,以及类型推断 .

    其中大部分是基于Martin Odersky之前使用_158365语言的工作 . OO / FP集成远远超出了仅仅关闭,并导致语言被描述为后功能 .

    尽管如此,它在很多方面都与Java最为接近 . 主要是由于OO支持和静态类型的结合,而且由于语言设计中的明确目标,它应该与Java紧密集成 .

    Groovy

    Groovy明确地解决了Java中两个最大的批评

    • 是动态类型的,它删除了很多样板和

    • 为语言添加了闭包 .

    它可能在语法上最接近Java,不提供Clojure和Scala提供的一些更丰富的功能结构,但仍提供明确的进化改进 - 特别是对于编写脚本程序 .

    Groovy拥有三种语言最强大的商业支持,主要是通过springource .

    Clojure

    Clojure是LISP系列中的一种功能语言,它也是动态类型的 .

    诸如STM支持之类的功能为其提供了一些最好的开箱即用并发支持,而Scala需要第三方库(如Akka)来复制它 .

    从语法上讲,它也是典型Java代码中三种语言中最远的 .

    我还必须透露我最熟悉Scala :)

  • 4

    它们可以与它们来自何处或主要针对哪些开发人员区分开来 .

    Groovy有点像Java的脚本版本 . 长期以来,Java程序员在构建由大型架构支持的敏捷应用程序时会感到宾至如归 . Grails上的Groovy,顾名思义与Rails框架类似 . 对于那些一直都很啰嗦的人 .

    Scala是一种面向对象的函数式编程语言,Ruby或Python程序员可能会感觉更接近这一点 . 它采用了很多这些编程语言中常见的好主意 .

    Clojure是Lisp编程语言的一种方言,因此Lisp,Scheme或Haskell开发人员在使用这种语言进行开发时可能会有宾至如归的感觉 .

  • 8

    显然,语法完全不同(Groovy最接近Java),但我想这不是你要求的 .

    如果您有兴趣使用它们来编写Java应用程序的脚本,那么Scala可能不是一个好的选择,因为它有来自Java的no easy way to evaluate,而Groovy特别适合于此目的 .

  • 68

    我没有时间玩clojure . 但对于scala vs groovy来说,这是来自James Strachan - Groovy创作者的话

    “虽然我长期更换javac的提示是Scala . 我对它印象非常深刻!我可以诚实地说,如果有人在2003年由Martin Odersky,Lex Spoon和Bill Venners向我展示Scala编程书籍我可能从未创建过Groovy . “

    你可以阅读整个故事here

  • 874

    我正在阅读Pragmatic Programmers的书“Groovy Recipes:Greasing the Java of Java”,Scott Davis,版权所有2008年,并于同年四月出版 .

    这有点过时了,但本书清楚地表明Groovy实际上是Java的扩展 . 我可以编写与Java完全相同的Java代码并重命名文件* .groovy并且它工作正常 . 根据这本书,如果我包含必要的库,则情况正好相反 . 到目前为止,实验似乎证实了这一点 .

  • 219

    Groovy是一种动态类型语言,其语法非常接近Java,具有许多语法改进,允许更轻的代码和更少的样板 . 它可以通过解释器运行并进行编译,这使得快速原型设计,脚本和学习动态语言非常有用,而无需学习新语法(假设您了解Java) . 从Groovy 2.0开始,它对static compilation的支持也越来越多 . Groovy支持闭包,并支持稍微功能的编程,尽管它仍然远离传统的函数式编程定义 .

    Clojure是Lisp的一种方言,有一些高级功能,如Software Transactional Memory . 如果您喜欢Lisp并希望在JVM下使用类似的东西,那么Clojure就适合您 . 它可能是在JVM上运行的最多functional language,当然也是最着名的 . 此外,它比其他Lisp方言更强调immutability,这使得它更贴近心脏功能语言爱好者 .

    Scala是一种完全面向对象的语言,比Java更为强大,其中一种是非研究语言中最先进的type systems,当然也是JVM上最先进的类型系统 . 它还结合了功能语言的许多概念和特性,而不会影响面向对象,但它在功能语言特性方面的妥协使后者的一些爱好者失去了兴趣 .

    Groovy在Grails中具有良好的接受度和流行的Web框架 . 它还支持Gradle构建系统,该系统正在成为Maven的流行替代品 . 我个人认为这是一种实用性有限的语言,特别是当Jython和JRuby开始在JVM-land上进行攻击时,与其他语言相比 .

    Clojure,甚至折扣了一些非常有趣的功能,只是在JVM上成为一个Lisp方言,具有强大的吸引力 . 它可能会限制它的受欢迎程度,但我希望它能在很长一段时间内拥有忠诚的社区 .

    Scala可以直接与Java竞争,并在几乎所有方面为它提供资金 . 当然,它目前无法在人气中竞争,缺乏强大的企业支持可能会阻碍其在企业环境中的接受度 . 从语言演变的角度来看,它也是一种比Java更具动态性的语言 . 从语言的角度来看,这是一件好事 . 从计划在其中编写数千行代码的用户的角度来看,并非如此 .

    作为最后的披露,我对Scala非常熟悉,并且只熟悉其他两个 .

相关问题