scala - groovy知乎 - 斯卡拉与Groovy与Clojure




language-comparisons (4)

斯卡拉

Scala从纯粹的函数式语言Funnel演化而来,代表了几乎所有Java语法的洁净室实现,不同之处仅在于可以做出明显的改进或者会损害语言的功能性。 这种差异包括单身对象而不是静态方法,以及类型推断。

其中很大一部分是基于Martin Odersky之前的Pizza语言工作。 OO / FP集成远远超出单纯的关闭,并导致语言被描述为后功能。

尽管如此,它在很多方面都离Java最近。 主要是由于面向对象支持和静态类型的结合,但是由于语言设计的明确目标,它应该与Java非常紧密地集成。

Groovy的

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

  • 被动态地键入,这将删除大量的样板文件
  • 添加关闭语言。

它可能在语法上离Java最近,并没有提供一些Clojure和Scala提供的更丰富的功能结构,但仍然提供了明确的进化改进 - 尤其是编写script-syle程序。

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

Clojure的

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

STM支持等特性为其提供了一些最佳的即用型并发支持,而Scala则需要第三方库(如Akka)来复制此类支持。

在语法上,它也是典型Java代码中三种语言中最远的一种。

我也必须透露我最熟悉斯卡拉:)

有人可以解释一下Scala,Groovy和Clojure之间的主要区别。 我知道每个编译器都要在JVM上运行,但我希望能够在它们之间进行简单的比较。


Groovy是一种动态类型语言,其语法与Java非常接近,并且有许多语法上的改进,允许使用更轻的代码和更少的样板。 它可以通过解释器运行,也可以编译,这使得它不需要学习新的语法(假设你知道Java)就可以快速建立原型,脚本和学习动态语言。 从Groovy 2.0开始,它也越来越支持静态编译 。 Groovy支持闭包,并支持编程功能,虽然它与传统的函数式编程定义相差甚远。

Clojure是Lisp的一种方言,具有软件事务内存等一些高级功能。 如果你喜欢Lisp并且想在JVM下使用类似的东西,Clojure会为你服务。 它可能是运行在JVM上的功能强大的语言 ,当然也是最有名的语言 。 此外,它比其他Lisp方言更强调immutability ,这更接近功能性语言爱好者的心脏。

Scala是一种完全面向对象的语言,比Java更具有面向对象的特点,它具有非研究语言中最先进的类型系统之一,当然也是JVM上最先进的类型系统。 它还结合了许多功能语言的概念和特征,而不会影响对象的方向,但是它在功能语言特征上的妥协让后者的一些爱好者望而却步。

Groovy在Grails中拥有良好的接受度和流行的Web框架。 它还支持Gradle构建系统,该系统正在成为Maven的流行替代方案。 我个人认为这是一种功能有限的语言,尤其是Jython和JRuby开始在JVM-land上进行攻击时,与其他攻击者相比。

Clojure甚至会打折一些非常有趣的功能,只是在JVM上作为Lisp方言才有吸引力。 它可能会限制它的受欢迎程度,但我希望它能在很长一段时间内拥有忠实的社区。

Scala可以直接与Java展开竞争,并在几乎所有方面为其赚钱。 当然,它目前无法赢得人气,而缺乏强大的企业支持可能会阻碍其对企业环境的接受程度。 从语言演化的角度来看,它也是比Java更动态的语言。 从语言的角度来看,这是一件好事。 从计划写入数千行代码的用户角度来看,并非如此。

作为最终披露,我对斯卡拉非常熟悉,只知道其他两位。


我正在阅读Scott Davis编着的Pragmatic Programmers一书“Groovy Recipes:Greasing the Java of Java”,版权2008,并于同年4月出版。

这有点过时,但本书明确表示Groovy实际上是Java的扩展。 我可以编写完全像Java一样运行的Java代码,并重命名文件* .groovy,并且它工作正常。 根据该书,如果我包括必要的图书馆,则情况正好相反。 到目前为止,实验似乎证明了这一点。


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

如果您有兴趣使用它们来编写Java应用程序,那么Scala可能不是一个好的选择,因为从Java 评估它不是一种简单的方法 ,而Groovy尤其适合此目的。





language-comparisons