为什么要夸大其他JVM Lisps:Kawa,Armed Bear还是SISC?

时间:2009-09-11 21:32:50

标签: clojure jvm lisp kawa

在Clojure到达现场之前,JVM已经有三个Lisps:KawaArmed BearSISC

那些Lisps留下的Clojure填补了什么空白?

11 个答案:

答案 0 :(得分:109)

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

Clojure是一种新的语言。它没有填充间隙。它增加了全新的可能性。它有利于纯粹的功能性方法 - Scheme和CL都是多范式的。 Clojure借鉴了各种FP语言(ML,Haskell)的设计。

是的,你可以为其他Lisps添加并发支持,但这完全没有意义。 Clojure从一开始就被设计为并发语言。因此,在Clojure中编写并发程序是微不足道的 - 而不是火箭科学,因为它是非函数式语言(Scheme,CL不排除)。看看这个方式:

人们说C允许你默认编写快速程序。

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

答案 1 :(得分:33)

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

  2. Clojure永远是最新的Clojure。使用移植到JVM的任何其他语言,JVM版本可能总是在追赶。如果您不需要Java平台,为什么要使用SISC而不是另一个Scheme?如果你这样做,为什么不使用专门为它设计的Lisp(Clojure)?

  3. 考虑到并发性而设计。

答案 2 :(得分:14)

我能想到的最简单的答案是,Clojure不是Common-Lisp。 Clojure不受其他Lisps历史的限制。它是JVM的 new 语言内置

答案 3 :(得分:11)

我根本不知道那些,这对Clojure来说是一个严重的好处(人们发现了我发现的足够的噪音)。 Clojure在我列出的内容中没有看到的最重要的事情是Software Transactional Memory

Clojure也是为JVM设计的,而不是另一种语言的层,所以它更像是“Java-y”,我想其他人在你必须进行互操作时会是这样。

答案 4 :(得分:11)

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

  

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

     
      
  • A Lisp
  •   
  • for Functional Programming
  •   
  • 与已建立的平台共生
  •   
  • 为并发而设计
  •   
     

并且找不到一个。

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

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

但它们不是(em)设计的(STM)并发;但是,为了公平和完整,我找到了至少2个尚未提及的ST的STM库:

  1. STMX
    • 在ABCL上进行测试。正在积极发展。
  2. CL-STM
    • 死了吗?最后一次改变发生在2007年。
  3. 嗯...那么为什么要创建一个新的Lisp?主要是因为这些是。 clojure.org上的理由页面继续(重点补充):

      

    标准Lisp(Common Lisp和Scheme)怎么样?

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

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

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

    从我的角度来看,这是它填补的两个空白。如果满足您的需求,您应该使用Clojure。如果Clojure从地图上掉下来,不要担心会失去你的技能。你的Lisp技能,但更重要的是你的思维方式,将延续到其他Lisp方言。

答案 5 :(得分:10)

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

答案 6 :(得分:7)

我还应该补充一点,Clojure是一种相对较新的语言,由一个人实施,具有良好的营销技巧和充沛的精力。他投入了大量的时间和大肆宣传...有时,炒作是一个自我实现的预言,如果你能说服足够的人,这是最新的最伟大的东西,那么你可以获得足够的支持和动力,使它实际上工作

我怀疑Kawa等的实施者没有那么多的利害关系,因此并没有大肆宣传他们的产品。此外,有什么炒作? “我们有一种很棒的语言......它被称为Lisp”这是一个更难的营销销售。

我认为Java就是一个很好的例子。它有一些非常严重的缺陷,但由于它的销售和炒作如此之大,它取得了很大的动力,这意味着硬件/软件供应商,工具生产商,工业投资等的支持。无论哪种方式,它都达到了一定程度的成功,虽然我讨厌编程。 Clojure可能会取得类似的成功,而其他Lisps则没有。

答案 7 :(得分:5)

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

话虽这么说,我尝试过Clojure并且讨厌那些似乎与Java连接的东西一起出现的对接因素的语法和痛苦。

答案 8 :(得分:1)

Clojure是“一个lisp”,它不是你已经知道的任何口齿不清。我花了最后一次 几天阅读材料和观看视频,我印象深刻。它的 前提是功能程序(基于不可变数据)是最好的方法 管理并发。 Clojure实现了一个基于JVM的类似lisp的系统来提供它。

答案 9 :(得分:0)

我们不需要再提供一个答案(我不希望对此进行投票),但这里有一些其他几个答案的小改进。

更新不一定更好。设计较新且设计较差并不好,较新且不保持不好,而没有较大(或至少增长)用户社区的较新者并不好。 (新语言会定期出现,但由于不使用,大多数语言都会被淘汰。)

我喜欢Common Lisp。它的美丽之处在于它的怪癖,它来自于它是由委员会设计的,其目标是向后兼容几种不相容的方言。

我喜欢Scheme。这是一种美丽,优雅的语言。然而,它的发展取决于委员会,也许这有时会减缓它的速度。无论如何,它的目标与Clojure不同。

Common Lisp和Scheme具有尾递归等重点,不适合JVM上的效率。 Clojure从一开始就设计好,可以很好地映射到JVM,并与Java进行良好的互操作(相当)。 (我不确定这对Clojurescript和CLR方言意味着什么。)

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

然而,这是重要的一点:Hickey设计了一种经过深思熟虑,优雅的语言,从一开始就包含了一系列系统相关的功能,可以轻松完成一点点。这适用于基本的JVM互操作以及其他语言。到目前为止,控制Clojure的人仍然严格遵守语言的目标。

这是我喜爱Clojure的重要部分:它既有整体设计,又有细节设计。这意味着一旦你习惯了它,很高兴在其中编程。

说Clojure具有Common Lisp的强大功能与Scheme的优雅,这只是一种夸大其词(或者说是疏忽?)。 Common Lisp有许多你需要内置于语言中的东西,但它是一团糟(我用爱说),当你需要的东西比语言更多时,有时会有几个不兼容的库有不同的权衡。尽管有可用的库,但设计方案很小。 Clojure拥有越来越多的标准库(与CL不同),它们或多或少是语言的一部分。核心.matrix项目就是一个很好的例证,它为几个不同的矩阵实现提供了一个通用接口。这很重要,因为有不同的矩阵实现最适合偶尔使用小矩阵,或者广泛使用大型矩阵,例如。

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

答案 10 :(得分:0)

这是新的!这意味着没有很多旧的lispers会使用它,因为传统的lisp社区很好,很传统,但这也意味着没有以前没有经验的人将会把它当作新事物。

Imho,Clojure对于旧的Lisps来说,Ruby对Smalltalk来说是什么。不一定更好,但足够好。而且至关重要的是,它对你的雇主来说更容易接受,因为它有动力并被视为一种正在兴起的语言,就像Ruby曾经一样。