首页 > Clojure 和 Scala 相比的优劣

Clojure 和 Scala 相比的优劣

想知道:

希望这方面的大神给详解一番。


首先声明,我主要使用 Clojure 编程,学习和评估过 Scala,但没有在具体工作中使用 Scala 的经历。因此很可能有偏见。

Scala 和 Clojure 都是基于 JVM 平台上的通用语言,其中 Scala 语言的历史更加悠久一点。

先说一些共同点:

但两种语言的设计哲学截然不同:

两种语言都是通用性的,因此是互相竞争关系,都声称自己适合全领域的编程。虽说在具体的库支持上可能互有长短(比如 Clojure 的 STM 被认为是更容易进行并行编程,而 akka 这样的 actor 库可以让 Scala 具有 Erlang 一般的能力),但这些很可能是临时的。所以考虑到选择一种新的语言,特别是如此有特点的两种语言,需要做好颠覆三观的准备(特别是少接触 Lisp 的大多数程序员),然后根据自己的喜好进行选择。

PS. 有人提出 Clojure 的可读性不好,这点我非常不同意。这很可能是熟悉程度弱所带来的一种偏见。对于自己不熟悉的语法表达会有这种看法。实际上,由于 Clojure 的语法统一程度强,一般来说好的 Clojure 程序的一致性会更好。当然,你也可以用它写出很烂的完全不可读的程序,但哪种语言也无法避免这样的可能吧?

PPS. FP 与 OO 的编程逻辑截然不同,从 OO 为主转为 FP 需要大的习惯转变。但如果不进行这种转变,何必学习一种新的语言来表达呢?特别是 Java 8 也已经加入了相当的 FP 支持,可以在 OO 为主的环境中加入 FP 的味道了。另外,Clojure 并不是纯粹的 FP 语言,从实用性的角度上它支持相当多的可变性编程;更纯粹的 FP 语言是 Haskell,学院派(非爱好者的“不实用”的说法)的语言。


Clojure是个JVM上的Scheme,对于熟悉Lisp家族语言的人来说更容易上手,但由于它是个纯FP,所以代码的可读性不太好。
Scala号称JVM上的C++,是个OO+FP的混合体,整体看代码风格更接近Java,对于传统的Java开发者更容易接受。

从库/框架方面看,Clojure和Scala都可以使用各种Java包(没错,Clojure也可以使用Scala包,反之亦然),所以这方面其实没有太大差别。

【热门文章】
【热门文章】