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

uzo*_*uzo 66 lisp jvm clojure kawa

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

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

dno*_*len 109

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

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

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

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

好吧,Clojure允许你默认编写并发程序.

  • @Rainer,添加一个并发库和一个用于并发的_designed_语言并不是一回事.请注意,我说"在Clojure中编写并发程序非常简单".SISC支持并发,但它基于锁定.这是众所周知的困难和痛苦.我没有说STM是编写并发程序所必需的.我的观点是Clojure程序默认是并发安全的(你不需要导入库来获得这些功能),并且在Clojure中编写并发软件要简单得多(因为STM没有锁定). (24认同)
  • 我不知道你为什么被降级.你的最后一句话总结了很多.Clojure提供了为JVM编写高性能STM程序的唯一可行的非学术方法.回到基于锁的并发就像回到手动内存管理一样:有时你需要它,它可能是一个很好的挑战,不需要繁琐,但总的来说它会分散应用程序的核心逻辑,这是为什么你不必在必要时这样做. (20认同)
  • A)人们几十年来一直在没有高阶编程的情况下写作.这说明并且没有任何证据.B)您是否尝试过使用STM?C)您是否尝试过使用STM?如果您需要编写具有共享状态的高度并发程序,该怎么办?锁如何帮助?基于锁定的并发可能对您来说很容易,但您的观点却反对大量的文献.此外,我不认为STM是这个问题的唯一答案,例如,Apple的Grand Central Dispatch是不同的方法,不需要锁定. (16认同)
  • 他被降级了,因为他甚至不在乎检查提到的其他Lisps:Kawa,ABCL SISC.例如,SISC文档说:'SISC提供了一个全面的库,用于在多个并发线程中并行执行Scheme代码'.所以你不需要为SISC添加并发性,它已经拥有它. (10认同)
  • 编写并发程序不需要STM.此外,不,并非每个严肃的语言实现都支持基于线程的并发.基于线程的并行执行得到广泛支持.并发执行并不是广泛支持的.dnolen甚至没有提到STM,他谈到了一个'可以'用其他语言添加并发支持(当它已经完成时)等等.另外,为什么在一个像Scheme这样的语言中添加'并发'会忽略这一点?我认为Lisp之类的语言因添加各种范式而闻名,是某种语言实验室. (8认同)

z5h*_*z5h 33

  1. "Clojure是一个不受向后兼容性约束的Lisp"(来自Clojure网站).这是一个新的开始.这是进步.使用使Lisp/Scheme强大的思想,但在Java 平台上重新考虑它们.

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

  3. 设计时考虑到了并发性.

  • Pete:它是为JVM和并发而设计的 - 这些并不是互斥的,只是因为它是为JVM设计的,并不意味着它必须像Java那样做事,只要它能很好地工作JVM并与现有的JVM库/代码很好地配合. (11认同)
  • 这似乎与其他帖子相矛盾 - Clojure是围绕Java平台和JVM设计的 - 线程并发与可变对象和基于锁的同步,而库主要基于getter,setter和事件循环(与函数式编程风格相反) ) - 或者它是围绕(某些其他形式的并发)和软件事务内存设计的,JVM本身不支持它. (2认同)

Ray*_*yne 14

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


MBC*_*ook 11

我根本不知道那些,这对Clojure来说是一个严重的好处(人们发现了我发现的足够的噪音).Clojure在我列出的内容中没有看到的最大的东西是软件事务内存.

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

  • Clojure与JVM有良好的互操作性,但就语言而言它是非常好的Lisp-y:例如,方法调用语法是`(.method someopject param1 param2).Clojure的Java-y部分是围绕设置环境(具有JVM,类路径,.jar文件等) (3认同)

Fra*_*son 11

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

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

  • 一个Lisp
  • 用于功能编程
  • 与既定平台共生
  • 专为并发而设计

而且找不到一个.

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

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

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

  1. STMX
    • 在ABCL上进行测试.积极发展.
  2. CL-STM
    • 死?最后一次改变是在2007年.

嗯...那么为什么要创建一个新的Lisp?主要是因为这些是图书馆.clojure.org上的理由页面继续(重点补充):

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

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

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

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

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


ire*_*ses 10

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

  • Clojure提供的东西与CL和Scheme提供的东西截然不同.你们两个都有三种经验(CL,Scheme,Clojure)吗?否则你们两个都会提供更多信息丰富的评论. (6认同)
  • 你可能是对的...你的反应在我脑海中引发了一些想法,导致我的反应. (2认同)

Lar*_*abe 7

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

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

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

  • 我不认为Rich Hickey会对语言进行大量"炒作".事实上,他似乎积极地"反炒作",并且在他对语言本身的描述中相当克制.就个人而言,使用CL(轻微)和Scheme(SICP),我可以说Clojure受益于公元2000年后开发而不是委员会.虽然我不喜欢Java语言,但有很多很好的设计库(Joda,JOGL,jSynth,Lucene,......).我也相信JVM背后的工程师知道他们正在做什么有StrongTalk,Self的体验(并且已经进入V8) (23认同)

Lar*_*abe 5

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

话虽这么说,我尝试了Clojure,并且讨厌那些似乎与Java连接的对接因素的语法和痛苦.

  • 他们可以通过外部函数接口访问Java库 - 但是使用Clojure,由于代码/数据被编译到JVM,java代码也可以在Clojure数据结构上运行.这提供了与Java更紧密和更无缝的集成.但是,对我来说,这就像是与一个你不喜欢或者找不到吸引力的女孩建立更亲密,更亲密的关系:)你能做到但是有什么意义呢? (3认同)