Clojure 和 Scala 相比的优劣
想知道:
- 这两种语言相比,各有什么优缺点
- 语言哲学
- 适用环境
希望这方面的大神给详解一番。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
想知道:
希望这方面的大神给详解一番。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
首先声明,我主要使用 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包,反之亦然),所以这方面其实没有太大差别。