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