为什么Clojure比其他JVM Lisp:Kawa,武装熊或SISC?

在Clojure到场之前,JVM已经有三个Lisp: Kawa , Armed Bear和SISC 。

那些Lisp留下的Clojure填补了什么空隙?

Kawa,ABCL和SISC正在重新实现相当长的现有语言。 如果由于某种原因,您希望在JVM上使用标准的Scheme或标准Common Lisp,那么它们非常出色。

Clojure是一种新的语言。 这并没有填补空白 。 它增加了全新的可能性。 它倾向于一个纯粹的function方法 – scheme和CL都是多范例。 Clojure很大程度上借鉴了各种FP语言(ML,Haskell)的devise。

是的,你可以添加并发支持其他Lisps,但是这完全没有意义。 Clojure从一开始就被devise为并发语言。 在Clojure中编写并发程序是微不足道的,而不是像非function语言那样是火箭科学(Scheme,CL没有被排除)。 看这样:

人们说,C可以让你默认编写快速的程序。

那么,Clojure可以让你默认编写并发程序。

  1. “Clojure是一个不受向后兼容限制的Lisp”(来自Clojure网站)。 这是一个新的开始。 这是进步。 使用Lisp / Scheme强大的思想,但重新思考Java 平台

  2. Clojure将永远是最近的Clojure。 随着任何其他语言移植到JVM,JVM版本可能会一直在追赶。 如果你不需要Java平台,为什么使用SISC而不是另一个scheme? 如果你这样做,为什么不使用专门为它devise的Lisp(Clojure)呢?

  3. devise时考虑到并发性。

我能想出的最简单的答案是,Clojure不是Common-Lisp。 Clojure不受其他Lisp的历史限制。 这是为JVM 构build语言。

我根本就没有意识到这些,这对Clojure来说是一个很大的好处(人们发现了足够的噪音)。 Clojure最大的东西,我没有看到你列出的是Software Transactional Memory 。

Clojure也是为JVMdevise的,而不是作为另一种语言的一个层次,所以当你需要互操作的时候,我想像其他语言会更加“Java-y”。

如果我是愤世嫉俗的,我会说这是因为Clojure有一个更好的网站和一个性感的名字。

clojure.org的基本原理页面指出:

为什么我写另一种编程语言? 基本上,因为我想:

  • Lisp
  • function编程
  • 与已build立的平台共生
  • 为并发而devise

并找不到一个。

你提到的三种语言(Kawa,ABCL和SISC)是否符合这些要求? 他们是:

  • Lisps(CL或Scheme方言)✓
  • 用于function编程✓
  • 与已build立的平台(JVM)共生✓

但它们不是为(STM)并发而devise的; 然而,为了公平和完整,至less有2个我find的CL尚未提及的STM库:

  1. STMX
    • 经过ABCLtesting。 积极发展。
  2. CL-STM
    • 死? 最后的变化是在2007年。

嗯…那么为什么要创build一个新的Lisp? 主要是因为这些是图书馆 。 clojure.org上的理由页面继续(着重部分):

标准Lisp(Common Lisp和Scheme)呢?

  • 标准化缓慢/无创新
  • 核心数据结构可变,不可扩展
  • 规格没有并发性
  • JVM已经存在良好的实现(ABCL,Kawa,SISC等)
  • 标准Lisp是他们自己的平台

正如其他人所提到的那样,这是一个语言并发devise问题。

此外,为什么要停留在JVM? Clojure CLR支持正在积极开发之中

从我的angular度来看,这是它填补的两个空白。 你应该使用Clojure,如果它满足你的需求。 如果Clojure退出地图,不要担心失去技能。 你的Lisp技能,但更重要的是你的思维方式,将会传递给其他Lisp方言。

我还要补充一点,Clojure是一个相对较新的语言,由一个人实施,具有良好的市场营销能力和精力。 他投入了大量的时间和炒作clojure …有时,炒作是一个自我实现的预言,如果你能说服足够的人,这是最新的伟大的事情,那么你可以得到足够的支持和动力,使其实际上工作。

我怀疑Kawa等的执行者没有太多的利害关系,因此不会哄骗他们的产品。 另外,有什么炒作呢? “我们有一个伟大的语言..它被称为Lisp”这是一个更难的营销出售。

我认为Java是一个很好的例子。 它有一些非常严重的缺陷,但是由于它的销售和炒作太多,所以得到了硬件/软件厂商,工具厂商,工业界投资等方面的支持。不pipe怎样,成功,虽然我讨厌它的编程。 Clojure可能在其他Lisp没有的情况下取得类似的成功。

Clojure的优点是它可以访问所有的java库/代码,并支持multithreading,因为它基于JVM。 另外,它的devise思想是并发的,通常不会被devise到lisp中,尽pipe由于映射原语的缘故,devise一个能很好地支持并发的lisp可能并不困难。

话虽如此,我曾尝试过Clojure,并憎恨对接因素中的语法和痛苦,似乎与任何与Java有关的东西都伴随着。

Clojure是“口齿伶俐”,它不是你已经知道的任何口头禅。 我花了几天的时间阅读材料和观看video,给我留下了深刻的印象。 其前提是function程序(基于不可变数据)是pipe理并发的最佳方式。 Clojure实现了一个基于JVM的lisp-like系统来提供它。

我们不必再有一个答案(我不希望为这个答案投票),但是这里有几个其他答案的小改进。

较新不一定更好。 devise新颖且devise不好不好,不新,不能维护不好,没有更大(或者至less不断增长)的用户群更新不好。 (新的语言经常出现,但是大多数语言都是因为废弃而瘫痪的。)

我喜欢Common Lisp。 它的美的部分原因是它的怪癖,它是由委员会devise的,其目的是向后兼容几种不兼容的方言。

我爱计划。 这是一个美丽,优雅的语言。 尽pipe如此,它的发展取决于委员会,也许这有时会减慢。 无论如何,它的目标都不同于Clojure的。

Common Lisp和Scheme有一些重点,比如尾recursion,它们不适合JVM的效率。 Clojure从一开始就被devise成可以映射到JVM上,并且能够很好地与Java进行互操作。 (我不确定Clojurescript和CLR方言的含义。)

Clojure最初由一个人Rich Hickey开发,由他和一个小团队控制,并不一定比委员会控制的语言更好。 如果那个人做出了错误的决定,Clojure就不会是一个好语言。

然而, 这是一个重要的观点 :Hickeydevise了一个经过深思熟虑的优雅语言,从一开始就包含了一套系统化的相关function,使其能够轻松地做一些事情。 这适用于基本的JVM互操作以及其他语言。 控制Clojure的人仍然严格坚持语言的目标,迄今为止。

这是我所喜爱的Clojure的重要组成部分:它的整体devise和细节devise都很好。 这意味着,一旦你习惯了,很高兴编程。

Clojure拥有Common Lisp的力量,并且具有Scheme的优雅性,这只会有点夸张(或者说是低估)。 Common Lisp有很多很多你需要的内容,但是它是一团糟(我用爱来说),当你需要比语言更多的东西时,有时候会有几个不兼容的库,有不同的折衷。 虽然有图书馆可用,但devisescheme很小。 Clojure拥有越来越多的标准库(与CL不同),这些标准库或多或less都是该语言的一部分。 core.matrix项目提供了一个很好的例子,它为几个不同的matrix实现提供了一个通用接口。 这一点很重要,因为有不同的matrix实现方式,例如偶尔使用小matrix或广泛使用巨matrix。

这并不是说Clojure比Common Lisp或Scheme更好; 不是。 三种语言有不同的美德。

这是新的! 这意味着不会有许多老的会员使用它,因为传统的lisp社区是好的,传统的,但是这也意味着没有以前的lisp经验的人会把它当成新事物。

Imho,Clojure对于Lisp来说是什么Ruby对Smalltalk的。 不一定更好,但足够好。 更重要的是,你的雇主更容易接受,因为它有动力,并被视为一种崛起的语言,就像Ruby一样。