为什么Clojure超过了其他JVM Lisp:Kawa、Armed Bear或SISC?

为什么Clojure超过了其他JVM Lisp:Kawa、Armed Bear或SISC?,clojure,jvm,lisp,kawa,Clojure,Jvm,Lisp,Kawa,在Clojure出现之前,JVM已经有三个Lisp:,和 这些口齿不清留下了什么空白 “Clojure是一个不受向后兼容性约束的Lisp”(来自Clojure网站)。 这是一个新的开始。这是进步。使用使Lisp/Scheme强大的思想,但要围绕Java平台重新思考 Clojure将始终是最近的Clojure。如果将任何其他语言移植到JVM,JVM版本可能总是在迎头赶上。如果您不需要Java平台,为什么要在另一个方案上使用SISC?如果需要,为什么不使用专门为其设计的一个Lisp(Clojure)

在Clojure出现之前,JVM已经有三个Lisp:,和

这些口齿不清留下了什么空白

  • “Clojure是一个不受向后兼容性约束的Lisp”(来自Clojure网站)。 这是一个新的开始。这是进步。使用使Lisp/Scheme强大的思想,但要围绕Java平台重新思考

  • Clojure将始终是最近的Clojure。如果将任何其他语言移植到JVM,JVM版本可能总是在迎头赶上。如果您不需要Java平台,为什么要在另一个方案上使用SISC?如果需要,为什么不使用专门为其设计的一个Lisp(Clojure)

  • 设计时考虑到并发性


  • 我只是没有意识到这些,这对Clojure来说是一个巨大的好处(我发现人们制造了足够多的噪音)。Clojure最大的优点是,我没有在你列出的产品中看到


    Clojure也是为JVM设计的,而不是作为另一种语言的一个层,因此它比我想象的其他语言在需要进行互操作时更为“Java-y”。

    Clojure的优点是它允许您访问所有的Java库/代码,和多线程支持,因为它基于JVM。此外,它的设计考虑到了并发性,这通常不是设计到lisp中的,尽管由于映射原语的缘故,设计一个能够很好地支持并发性的lisp可能并不困难


    话虽如此,我尝试过Clojure,但我讨厌它的语法和与Java相关的任何东西都会带来的屁股因素的痛苦。

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

    Kawa、ABCL和SISC是现有语言的重新实现,这些语言已经很长时间了。如果出于某种原因,您希望在JVM上使用标准Scheme或标准Common Lisp,那么它们非常优秀

    Clojure是一种新语言。这并不能填补空白。它增加了全新的可能性。它倾向于一种纯粹的功能性方法——Scheme和CL都是多范式的。Clojure大量借鉴了各种FP语言(ML、Haskell)的设计

    是的,您可以向其他Lisp添加并发支持,但这完全没有抓住要点。Clojure从一开始就被设计为并发语言。因此,编写并发程序在Clojure中是微不足道的,而不是像在非函数式语言中那样在火箭科学中(Scheme,CL不排除)。这样看:

    人们说,默认情况下,C允许您编写快速程序


    嗯,Clojure默认允许您编写并发程序。

    我还应该补充一点,Clojure是一种相对较新的语言,由一个人实现,具有良好的营销技能和大量精力。他在clojure上投入了大量的时间和炒作。。。有时,这种宣传是一种自我实现的预言,如果你能让足够多的人相信这是最新最伟大的事情,那么你就能得到足够的支持和动力,使它真正起作用

    我怀疑Kawa等的实现者没有那么大的利害关系,因此没有宣传他们的产品。此外,还有什么可以炒作的?“我们有一门很棒的语言,叫做Lisp”,这是一门很难推销的语言

    我认为Java就是一个很好的例子。它有一些非常严重的缺陷,但因为它的市场推广和炒作如此之大,它获得了大量的动力,这意味着来自硬件/软件供应商、工具生产商、行业投资等的支持。无论哪种方式,它都取得了一定程度的成功,尽管我讨厌在其中编程。Clojure可能会在其他lisp没有的地方取得类似的成功。

    Clojure是“一个lisp”,它不是你已经知道的任何lisp。我已经度过了最后一个星期 读了几天材料,看了几段视频,我印象深刻。它的 前提是功能程序(基于不可变数据)是实现
    管理并发性。Clojure实现了一个基于JVM的类似lisp的系统来提供它。

    我能想到的最简单的答案是,Clojure不是常见的lisp。Clojure不受其他Lisp历史的限制。它是为JVM构建的一种新语言。

    clojure.org上的基本原理页面说明:

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

    • 口齿不清
    • 函数式编程
    • 与已建立的平台共生
    • 为并发而设计
    找不到一个

    您提到的3种语言(Kawa、ABCL和SISC)是否满足这些要求?它们是:

    • Lisps(CL或Scheme方言)✓
    • 函数式编程✓
    • 与已建立的平台(JVM)共生✓
    但它们不是为(STM)并发而设计的;然而,为了公平和完整,我发现至少有2个用于CL的STM库尚未提及:

    • 在ABCL上测试工作。正在积极开发中
    • 死了?上一次改变是在2007年
  • 嗯。。。那么为什么要创建一个新的Lisp呢?主要是因为这些是图书馆。clojure.org上的理由页面继续(重点添加):

    那么标准Lisp(通用Lisp和Scheme)呢

    • 标准化后缓慢/无创新
    • 核心数据结构可变,不可扩展
    • 规范中没有并发性
    • JVM已经有了很好的实现(ABCL、Kawa、SISC等)
    • 标准LISP是它们自己的平台
    正如其他人所提到的,这是一个语言并发设计问题

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

    在我看来,这就是它填补的两个空白。你应该使用Cloju