有人能解释一下Scala、Groovy和Clojure之间的主要区别吗?我知道这些编译器都在JVM上运行,但我想在它们之间做一个简单的比较。
当前回答
它们可以根据它们来自哪里或主要针对哪些开发者进行区分。
Groovy有点像Java的脚本版本。长期从事Java编程的程序员在构建由大型体系结构支持的敏捷应用程序时感到很自在。Groovy on Grails,顾名思义,类似于Rails框架。适合那些不想一直为Java的冗长而烦恼的人。
Scala是一种面向对象的函数式编程语言,Ruby或Python程序员可能更倾向于这种语言。它采用了很多在这些编程语言中常见的好思想。
Clojure是Lisp编程语言的一种方言,所以Lisp、Scheme或Haskell开发人员在使用这种语言进行开发时可能会感到很自在。
其他回答
显然,语法是完全不同的(Groovy最接近Java),但我认为这不是您想要的。
如果您有兴趣使用它们来编写Java应用程序的脚本,那么Scala可能不是一个好的选择,因为从Java中没有简单的方法来评估它,而Groovy特别适合这个目的。
它们可以根据它们来自哪里或主要针对哪些开发者进行区分。
Groovy有点像Java的脚本版本。长期从事Java编程的程序员在构建由大型体系结构支持的敏捷应用程序时感到很自在。Groovy on Grails,顾名思义,类似于Rails框架。适合那些不想一直为Java的冗长而烦恼的人。
Scala是一种面向对象的函数式编程语言,Ruby或Python程序员可能更倾向于这种语言。它采用了很多在这些编程语言中常见的好思想。
Clojure是Lisp编程语言的一种方言,所以Lisp、Scheme或Haskell开发人员在使用这种语言进行开发时可能会感到很自在。
Groovy is a dynamically typed language, whose syntax is very close to Java, with a number of syntax improvements that allow for lighter code and less boilerplate. It can run through an interpreter as well as being compiled, which makes it good for fast prototyping, scripts, and learning dynamic languages without having to learn a new syntax (assuming you know Java). As of Groovy 2.0, it also has growing support for static compilation. Groovy supports closures and has support for programming in a somewhat functional style, although it's still fairly far from the traditional definition of functional programming.
Clojure是Lisp的一种方言,具有一些高级特性,如软件事务内存。如果你喜欢Lisp,并且想在JVM下使用类似的东西,Clojure就是为你准备的。它可能是JVM上运行的最具函数性的语言,当然也是最有名的一种。此外,它比其他Lisp方言更强调不可变性,这使它更接近函数式语言爱好者的心。
Scala是一种完全面向对象的语言,与Java相比更是如此,它是非研究语言中可用的最先进的类型系统之一,当然也是JVM中最先进的类型系统。它还结合了函数式语言的许多概念和特性,而不损害面向对象,但它在函数式语言特性上的妥协使后者的一些爱好者望而却步。
Groovy在Grails中有很好的接受度和一个流行的web框架。它还支持Gradle构建系统,该系统正在成为Maven的流行替代品。我个人认为,与其他语言相比,它是一种实用性有限的语言,特别是当Jython和JRuby开始进军jvm领域时。
Clojure,即使不考虑一些非常有趣的特性,仅作为JVM上的Lisp方言就具有强大的吸引力。当然,这可能会限制它的受欢迎程度,但我预计它将在很长一段时间内拥有忠实的社区。
Scala可以直接与Java竞争,并且在几乎所有方面都与Java竞争。当然,目前它在受欢迎程度上无法与之竞争,而且缺乏强大的企业支持可能会阻碍它在企业环境中的接受度。就语言的演变而言,它也是一种比Java更加动态的语言。从语言的角度来看,这是一件好事。从用户的角度来看,他们计划在其中编写数千行代码,但事实并非如此。
最后一点,我非常熟悉Scala,而且只熟悉另外两种。
我正在阅读实用程序员的书“Groovy Recipes: Greasing the wheels of Java”,作者Scott Davis,版权所有,2008年4月出版。
这有点过时了,但这本书清楚地表明,Groovy实际上是Java的扩展。我可以编写功能与Java完全相同的Java代码,并将文件重命名为*。Groovy,它工作得很好。根据这本书,如果我包括必要的图书馆,情况则相反。到目前为止,实验似乎证实了这一点。
我从来没有时间玩clojure。但是对于scala和groovy,这是来自groovy创建者James Strachan的话
“尽管我的建议是,从长远来看,javac的替代品是Scala。 我对它印象深刻!老实说,如果有人给我看过的话 Martin Odersky、Lex Spoon和Bill合著的《Scala编程》一书 如果回到2003年,我可能永远也不会创建Groovy。”
你可以在这里阅读整个故事
推荐文章
- Akka Kill vs Stop vs Poison Pill?
- 如何开始与Akka流?
- Scala 2.8 breakOut
- 如何克隆一个案例类实例,只改变一个字段在Scala?
- ':_* '(冒号下划线*)在Scala中有什么作用?
- 在Clojure中调试?
- 定义一个函数时,“def”和“val”有什么区别
- 在Scala中获取列表中的项目?
- Jenkins:注释可以添加到Jenkins文件中吗?
- case对象和对象的区别
- Scala中的Case对象与枚举
- 任务不可序列化:java.io.NotSerializableException,当只对类而不是对象调用闭包外部的函数时
- 在Scala中将一个元素附加到列表的末尾
- 在Scala中按名称调用vs按值调用,需要澄清
- 解析命令行参数的最佳方法?