为什么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可以让你默认编写并发程序。
-
“Clojure是一个不受向后兼容限制的Lisp”(来自Clojure网站)。 这是一个新的开始。 这是进步。 使用Lisp / Scheme强大的思想,但重新思考Java 平台 。
-
Clojure将永远是最近的Clojure。 随着任何其他语言移植到JVM,JVM版本可能会一直在追赶。 如果你不需要Java平台,为什么使用SISC而不是另一个scheme? 如果你这样做,为什么不使用专门为它devise的Lisp(Clojure)呢?
-
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库:
- STMX
- 经过ABCLtesting。 积极发展。
- 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一样。