什么类型的问题是Clojure在解决Scala方面的好/坏?

时间:2011-10-01 04:06:37

标签: scala clojure

这两种语言都是基于JVM的,对功能编程有很强的支持。我知道会出现一大类问题,两种语言都能提供出色的解决方案。我想知道的是,如果有任何特殊类型的问题,Clojure的功能会给它一个显着的优势来反对Scala和反之亦然。目前我们在Scala中做了很多工作,但我想留意Clojure可能提供更好解决方案的特定问题空间。

3 个答案:

答案 0 :(得分:38)

这两种语言都非常强大,适用于几乎所有领域。你不能用这两种语言特别出错 - 我甚至可以说它们可能是目前最有前途的两种语言。

我仍然认为有几个方面他们各自都有独特的优势:

Clojure相对于Scala的特殊优势:

  • 并发 - Clojure在语言中内置了独特且非常强大的并发支持,基于对对象身份和可变状态的新思维方式。这在其他地方已得到很好的解释,所以我不会在这里详细介绍,但video by Rich Hickey这是获得一些见解的好地方。
  • 元编程 - Clojure是一种homoiconic语言,使其特别适合基于宏的元编程,DSL创建和代码生成。它遵循Lisp“代码是数据”这一方面的理念。
  • 动态类型 - Clojure是一种动态语言,具有通常与动态语言相关的所有优点(更少的样板,快速原型设计,非常简洁的代码等)。
  • 功能编程 - 虽然您可以在Scala中执行FP,但Clojure肯定更像是一个功能性语言(而Scala可能最好被描述为多范式)。 Clojure中的这种功能强调以几种方式表现出来,例如内置于所有核心库的惰性评估支持,所有数据结构都是不可变的,惯用的Clojure“编码风格”是功能性而非命令性/ OOP。

斯卡拉相对于Clojure的特殊优势:

  • 面向对象 - Scala在概念上更接近Java,并且更好地支持Java风格的OOP方法。虽然你可以在Clojure中做OOP,但它并不适合。
  • 语法熟悉 - 对于来自其他非Lisp语言的人来说,Scala语法可能更为舒适
  • 静态类型 - Scala有一个非常复杂的静态类型系统。在静态类型是优势的情况下,Scala将具有明显的优势。静态类型的通常优点适用 - 编译器可以捕获更多潜在的“类型”错误,编译器有更多机会进行性能优化等。
  • 更成熟 - Scala比Clojure(2003年与2007年)相比有一段时间,因此您可以从更成熟的语言中获得一些好处(更好的工具)支持,稍微大一点的社区)

为了完整起见,两种语言都有一些独特的优势:

  • 积极和创新的社区 - 两种语言都建立了一个活跃的社区,其中包含各种各样的贡献者
  • 与Java的出色互操作性 - 两种语言都可以轻松利用Java生态系统中的大量库和工具
  • JVM优势 - 两种语言都受益于JVM中的所有优秀工程(JIT编译器,垃圾收集算法,优化的执行环境等)。

答案 1 :(得分:11)

由于Clojure的宏系统,我更喜欢使用Clojure来编写DSL。此外,我更喜欢Clojure用于某些类型的并发系统。 Clojure对software transactional memory的原生支持与Scala的演员模型完全不同。

Clojure对面向对象编程没有很大的支持。对于面向对象范例运行良好的项目,或者您将严重依赖Java库/框架,我更喜欢Scala。

答案 2 :(得分:4)

关于Clojure和Scala的一个好处是你可以在同一个地方使用两个,而且摩擦力最小。我只建议在Clojure中进行大部分互操作,因为我觉得它有优势。

试试两者,看看哪些问题和语言融合在一起。您可以非常轻松地在同一系统中的Java,Scala和Clojure代码之间进行互操作。