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