在 Clojure 出现之前,JVM 已经有了三个 Lisp: 卡瓦, 武装熊塞西卡.

什么间隙 克洛尤尔 填充那些 Lisp 留下的内容?

有帮助吗?

解决方案

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

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

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

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

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

其他提示

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

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

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

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

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

Clojure也是为JVM设计的,而不是另一种语言的层,所以它更多的是“Java-y”。我想其他人就是你必须做互操作的时候。

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

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

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

却找不到。

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

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

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

  1. STMX
    • 已在 ABCL 上进行测试。正在积极开发中。
  2. CL-STM
    • 死的?上次更改是在 2007 年。

唔...那么为什么要创建一个新的 Lisp 呢?主要是因为这些 图书馆. 。clojure.org 上的基本原理页面继续(添加了重点):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

我喜欢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更好;不是。这三种语言有不同的优点。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top