本文是Stack Overflow上的问题《Scala vs. Groovy vs. Clojure [closed]》
的高票回答的翻译
Scala vs. Groovy vs. Clojure(Scala、Groovy和Clojure的比较)
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.
Groovy是一种动态类型语言,其语法非常接近于Java。它提供大量的简洁语法,可以使代码更加轻量以及更少的样板代码(boilerplate)。Groovy代码既可以被编译,也可以直接在解释器上运行,这使得它非常适合用于快速原型设计、脚本以及学习动态语言,而不必学习新的语法(假设你知道Java)。到了Groovy 2.0,它开始支持静态编译(static compilation)。Groovy 支持闭包,并且也支持某种程度上的函数式编程,尽管它离传统意义的函数式编程还很远。
Clojure is a dialect of Lisp with a few advanced features like Software Transactional Memory. If you like Lisp and would like to use something like it under the JVM, Clojure is for you. It's possibly the most functional language running on the JVM, and certainly the most famous one. Also, it has a stronger emphasis on immutability than other Lisp dialects, which takes it closer to the heart of functional language enthusiasts.
Clojure是一种Lisp的方言,具有许多高级特性,如软件事务内存(Software Transactional Memory)。如果你喜欢Lisp语言,并且希望在Java虚拟机上使用它,那么Clojure非常适合你。它或许是JVM上最接近函数式编程的语言了,并且当然是最出名的一个。同时,它比其它的Lisp方言更加强调不变性(immutability),这使得Clojure更加受到函数式编程狂热者的青睐。
Scala is a fully object oriented language, more so than Java, with one of the most advanced type systems available on non-research languages, and certainly the most advanced type system on the JVM. It also combines many concepts and features of functional languages, without compromising the object orientation, but its compromise on functional language characteristics put off some enthusiasts of the latter.
Scala是纯粹的面向对象语言,这一点上更甚于Java。Scala具有非研究性语言(non-research languages)上最高级的类型系统之一,并且同时也是JVM上最高级的类型系统。它结合了函数式语言的许多概念和特征,同时仍保持了面向对象的特性。但是因为Scala没有完全实现函数式语言,所以它在函数式编程的狂热者心中排名不高。
Groovy has good acceptance and a popular web framework in Grails. It also powers the Gradle build system, which is becoming a popular alternative to Maven. I personally think it is a language with limited utility, particularly as Jython and JRuby start making inroads on the JVM-land, compared to the others.
Groovy的接受度很高,并且它实现了Grails这个受欢迎的Web框架。它同时也是Gradle这个的构建工具(很有可能代替Maven)的实现语言。但是我个人认为它的效用和其他语言相比是有限的,特别是在如今Jython和JRuby在JVM领域大行其道的时候。
Clojure, even discounting some very interesting features, has a strong appeal just by being a Lisp dialect on JVM. It might limit its popularity, granted, but I expect it will have loyal community around it for a long time.
Clojure,尽管砍掉了一些很有趣的特性,但是因为作为可在JVM上运行的Lisp方言,仍然具有较强的吸引力。这或许限制了它的普及,但就算如此,我认为它依然能够存在很长时间。
Scala can compete directly with Java, and give it a run for its money on almost all aspects. It can't compete in popularity at the moment, of course, and the lack of a strong corporate backing may hinder its acceptance on corporate environments. It's also a much more dynamic language than Java, in the sense of how the language evolves. From the perspective of the language, that's a good thing. From the perspective of users who plan on having thousands of lines of code written in it, not so.
Scala能直接和Java竞争,并且在几乎所有方面都可以媲美(译注:"What does 'Give someone a run for their money' mean?":If you can give someone a run for the money, you are as good, or nearly as good, as they are at something.)。但是同时在受众程度上稍微逊色一点,并且由于缺乏强有力的企业支持,在企业环境中尚不能完全推广。从语言的设计上来看,比起Java,Scala是一种更加动态的语言。从语言本身的观点来看这是件好事。但是从用户的角度,尤其是那些计划用Scala来写成千上万行代码的用户来说,未必如此。
As a final disclosure, I'm very familiar with Scala, and only acquainted with the other two.
最后,对于我而言我更熟悉Scala,对其他两者只是略有耳闻。