有人可以解释Scala,Groovy和Clojure之间的主要区别。 我知道这些编译中的每一个都在JVM上运行,但我想在它们之间进行简单的比较。
#1楼
它们可以与它们来自何处或主要针对哪些开发人员区分开来。
Groovy有点像Java的脚本版本。 长期以来,Java程序员在构建由大型架构支持的敏捷应用程序时会有宾至如归的感觉。 Grails上的Groovy,顾名思义与Rails框架类似。 对于那些不想一直打扰Java冗长的人。
Scala是面向对象和函数式编程语言,Ruby或Python程序员可能会感觉更接近这一点。 它采用了很多这些编程语言中常见的好主意。
Clojure是Lisp编程语言的一种方言,因此Lisp,Scheme或Haskell开发人员在使用这种语言进行开发时可能会有宾至如归的感觉。
#2楼
显然,语法完全不同(Groovy最接近Java),但我认为这不是你要求的。
如果您有兴趣使用它们来编写Java应用程序的脚本,那么Scala可能不是一个好的选择,因为没有简单的方法可以从Java中评估它,而Groovy特别适合于此目的。
#3楼
Groovy是一种动态类型语言,其语法非常接近Java,具有许多语法改进,允许更轻的代码和更少的样板。 它可以通过解释器运行并进行编译,这使得快速原型设计,脚本和学习动态语言非常有用,而无需学习新语法(假设您了解Java)。 从Groovy 2.0开始,它对静态编译也有越来越多的支持。 Groovy支持闭包,并且支持以某种功能性编程的编程,尽管它仍然远离传统的函数式编程定义。
Clojure是Lisp的一种方言,具有一些软件事务内存等高级功能。 如果您喜欢Lisp并希望在JVM下使用类似的东西,那么Clojure就适合您。 它可能是在JVM上运行的功能最强大的语言 ,当然也是最着名的语言 。 此外,它比其他Lisp方言更强调不变性 ,这使得它更接近功能语言爱好者的心脏。
斯卡拉是一个完全面向对象的语言,比Java更何况,用最先进的一个类型系统对非研究语言的版本,当然在JVM上最先进的类型系统。 它还结合了功能语言的许多概念和功能,而不会影响面向对象,但它在功能语言特性上的妥协使后者的一些爱好者失去了兴趣。
Groovy在Grails中具有良好的接受度和流行的Web框架。 它还支持Gradle构建系统,该系统正在成为Maven的流行替代品。 我个人认为这是一种实用性有限的语言,特别是当Jython和JRuby开始在JVM-land上进行攻击时,与其他语言相比。
Clojure,甚至折扣了一些非常有趣的功能,只是在JVM上成为一个Lisp方言,具有很大的吸引力。 这可能会限制它的受欢迎程度,但我希望它能在很长一段时间内拥有忠诚的社区。
Scala可以直接与Java竞争,并在几乎所有方面为其付出代价。 当然,它目前无法在人气中竞争,缺乏强大的企业支持可能会阻碍其在企业环境中的接受度。 从语言的演变来看,它也是一种比Java更具动态性的语言。 从语言的角度来看,这是一件好事。 从计划在其中编写数千行代码的用户的角度来看,并非如此。
作为最后的披露,我对Scala非常熟悉,并且只熟悉其他两个。
#4楼
斯卡拉
Scala是一种名为Funnel的纯函数式语言,它代表了几乎所有Java语法的洁净室实现,只有在可以进行明显改进或者会损害语言功能性的地方才有所不同。 这些差异包括单例对象而不是静态方法,以及类型推断。
其中大部分是基于Martin Odersky之前使用Pizza语言的工作。 OO / FP集成远远超出了仅仅关闭,并导致语言被描述为后功能。
尽管如此,它在很多方面都与Java最为接近。 主要是由于OO支持和静态类型的结合,而且由于语言设计中的明确目标,它应该与Java紧密集成。
Groovy的
Groovy明确地解决了Java中最受批评的两个问题
- 动态类型化,删除了很多样板和
- 为语言添加闭包。
它可能在语法上最接近Java,不提供Clojure和Scala提供的一些更丰富的功能结构,但仍提供明确的进化改进 - 特别是对于编写脚本程序。
Groovy拥有三种语言最强大的商业支持,主要是通过springource。
Clojure的
Clojure是LISP系列中的一种功能语言,它也是动态类型的。
诸如STM支持之类的功能为它提供了一些最好的开箱即用并发支持,而Scala需要像Akka这样的第三方库来复制它。
从语法上讲,它也是典型Java代码中三种语言中最远的。
我还必须透露我最熟悉Scala :)
#5楼
我正在阅读实用程序员的书“Groovy Recipes:Greasing the Java of Java”,Scott Davis,版权所有2008,并于同年4月出版。
这有点过时了,但本书清楚地表明Groovy实际上是Java的扩展。 我可以编写与Java完全相同的Java代码并重命名文件* .groovy并且工作正常。 根据这本书,如果我包含必要的库,则反之亦然。 到目前为止,实验似乎证实了这一点。
#6楼
我没有时间玩clojure。 但对于scala vs groovy来说,这是来自James Strachan - Groovy创作者的话
“虽然我对scav的长期更换提示是scala。我对它印象非常深刻!我可以诚实地说,如果有人在2003年向我展示了Martin Odersky,Lex Spoon和Bill Venners的Scala编程书籍我可能从未创建过Groovy。“
你可以在这里阅读整个故事