为什么Lisp社区如此分散?[关闭]


69

首先,不仅有该语言的两个主要方言(Common Lisp和Scheme),而且每个方言都有许多单独的实现。例如,Chicken Scheme,Bigloo等……每个都有细微差别。

从现代的角度来看,这很奇怪,因为如今的语言倾向于具有确定的实现/规范。考虑一下Java,C#,Python,Ruby等,其中每个都有一个单独的权威站点,您可以从中找到API文档,下载等。当然,Lisp早于所有这些语言。但是话又说回来,甚至C / C ++也已经标准化(或多或少)。

这个社区的分裂是由于Lisp的年龄造成的吗?还是不同的实现/方言旨在解决不同的问题?我知道有充分的理由使Lisp永远不会像在单一的确定性实现中成长起来的语言那样统一,但是在这一点上,有充分的理由使Lisp社区不应该朝这个方向发展吗?


26
因为当他们说话时,他们无法理解和理解彼此之间的交流。;)
FrustratedWithFormsDesigner 2010年

28
C远不及老!Lisp年龄50岁,C年龄将近40岁。那些10年初期是艰难的!
Frank Krueger 2010年

4
C有一个标准,并且有许多变体开发该标准的扩展。然后是C ++,C#,Objective C,C-,BitC,D ...
Rainer Joswig 2010年

3
LISP也有标准。有两个主要标准(方案和CL)。
troelskn 2010年

3
该问题应标记为“社区Wiki”,因为它是有关编程文化的问题,而不是有关编程的问题。
马克·罗杰斯

Answers:


169

Lisp社区支离破碎,但其他所有方面也是如此。

  • 为什么会有那么多Linux发行版?

  • 为什么会有这么多的BSD变体?OpenBSD,NetBSD,FreeBSD,甚至Mac OSX。

  • 为什么会有那么多脚本语言?Ruby,Python,Rebol,TCL,PHP和其他无数种。

  • 为什么会有这么多的Unix shell?sh,csh,bash,ksh,...?

  • 为什么徽标(> 100),基本(> 100),C(无数),...的实现如此之多...

  • 为什么Ruby有这么多变体?Ruby MRI,JRuby,YARV,MacRuby,HotRuby?

  • Python可能有一个主要站点,但是有一些稍微不同的实现:CPython,IronPython,Jython,适用于S60的Python,PyPy,Unladen Swallow,CL-Python,...

  • 为什么会有C(Clang,GCC,MSVC,Turbo C,Watcom C,...),C ++,C#,Cilk,Objective-C,D,BCPL,...?

只要让其中一些人获得五十个,然后看看它有多少种方言和实现即可。

我猜Lisp是多种多样的,因为每种语言都是多种多样的,或者会变得多种多样。有些是从单一实现开始的(McCarthy的Lisp),五十年后您就拥有了动物园。Common Lisp甚至从多种实现开始(针对不同的机器类型,操作系统,不同的编译器技术……)。

如今Lisp是一种语言家族,而不是一种语言。甚至没有共识什么语言属于那个家族。可能要检查一些条件(s表达式,函数,列表等),但是并非每个Lisp方言都支持所有这些条件。语言设计师尝试了不同的功能,我们或多或少地获得了许多类似Lisp的语言。

如果看Common Lisp,大约有三到四个不同的活跃商业供应商。尝试让他们成为一项产品的支持者!不行 然后,您会得到一堆具有不同目标的活跃的开源实现:一个是用C编译的,另一个是用C编写的,一个试图拥有一个快速优化的编译器,一个试图拥有本机编译的中庸之道,一个目标是JVM ...等。尝试告诉维护者放弃他们的实现!

该计划有大约100个实施方案。许多人已经死了,或者大部分都死了。至少有十到二十个处于活动状态。有些是业余爱好项目。有些是大学项目,有些是公司的项目。该用户有不同的需求。一个人需要一个游戏的实时GC,另一个人需要嵌入到C中,一个人只需要出于教育目的的准系统构造,依此类推。如何告诉开发人员不要破坏其实现。

然后有些人不喜欢Commmon Lisp(太大,太旧,功能不足,面向对象不够,速度太快,不够快……)。有些人不喜欢Scheme(过于学术,太小,无法扩展,功能太强大,功能不足,没有模块,模块错误,宏指令不正确……)。

然后有人需要将Lisp与Objective-C结合使用,然后得到Nu。有人为.net入侵了一些Lisp。然后,您将获得一些具有并发性和新思想的Lisp,然后您将获得Clojure。

这是工作中语言演变。就像寒武纪的爆炸一样(当出现许多新动物时)。有些会死,有些会继续存在,有些会出现。在某个时间点上出现了一些方言,这些方言接pick了最先进的技术(在70年代/ 80年代使用Lisp进行功能性编程的所有方案,在80年代像MacLisp那样使用Common Lisp的所有方案)-这导致某些方言大部分消失(即标准Lisp,InterLisp等)。

普通Lisp是Lisp方言的短吻鳄。这是一个非常古老的设计(几亿年),几乎没有变化,看上去有些令人恐惧,并且时不时地吃一些年轻的...

如果您想了解更多,Lisp的演变(以及相应的幻灯片)是一个很好的开始!


29
值得指出的是,Lisp是当今仍在使用的最古老的语言之一。这意味着它比大多数语言要花费更多的时间来进行碎片化
达菲德·里斯

7
@KenLiu实际上,Lisp源代码似乎与某些主流语言(例如Java)具有相同的括号,但总体上标点较少。
Eleno 2012年

@Elena-有趣的...您有参考吗?
贾斯汀·埃斯蒂尔2012年

5
@JustinEthier-不 我只是注意到有一天我正在用Java进行编码,并且注意到每个函数调用都有一对括号,就像Lisp一样,但是Java有冒号和点,这在Lisp中是不存在的。
Eleno 2012年

11
@JustinEthier-示例:i = 0;=>(setq i 0)//有趣(a,b,c); =>(fun abc)// object.fun(a,b,c)=>(fun obj abc)//`Lisp的括号更容易看到,因为它们被堆积了,但是一旦您习惯了它们,并可能突出显示它们具有微妙的色彩,那么您会发现总体上杂乱无章。
Eleno 2012年

14

我认为这是因为“ Lisp”是一种语言的广泛描述。我知道的所有lisps之间唯一的共同之处是大多数东西都放在方括号中,并使用前缀函数表示法。例如

(fun (+ 3 4))

但是,几乎所有其他内容在实现之间可能有所不同。Scheme和CL是完全不同的语言,应该这样考虑。

我认为将Lisp社区称为零散就像将“ C类”社区称为零散。它具有c,c ++,d,java,c#,go,javascript,python和许多其他我想不到的语言。

总结:Lisp比实际的语言实现更多地是一种语言属性(如垃圾回收,静态类型),因此,与许多语言具有垃圾回收一样,许多语言都具有Lisp like属性是完全正常的。


1
一直都是这样吗?肯定在开始时就有一个Lisp,然后将其分裂(分裂成碎片?碎了?解开了?)成其他方言?还是总是有方言?
FrustratedWithFormsDesigner

是的,这是正确的,但是类似C语言的启动方式是相同的。最初只有一个(很明显是c),然后是c ++,java和所有其他语言。这很自然,因为每种语言以不同的方式处理事情。例如,c ++引入了对象,而java引入了内存管理和虚拟机概念。
David Miani

4
在最初,只有一个Lisp,即最初的实现。但这绝对是零散的。今天,我们有了Common Lisp,特别是由于该碎片,它旨在统一分裂的Lisps。就是说,尽管从Scheme(特别是词汇绑定)中提起了事情,但是Scheme从来不是不可避免地构成Common Lisp的部分的“一部分”。值得一提的是,我们可以讨论基于Lisp的对象系统。
Will Hartung 2010年

5
Lisp的最初描述是一篇学术论文,没有实现或什至没有打算这样做的意图。第一个实现很快就出现了,这令作者感到惊讶。请参阅wikpedia文章的历史记录部分。
dmckee ---前主持人小猫,2010年

4
python是“ C like”吗?不是:S
AnnanFay 2010年

11

我认为这是因为Lisp诞生于并保持了黑客文化的精神。黑客文化是根据您对“更好”的信念,采取某种措施使其“更好”。

因此,当您拥有一群自以为是的黑客和一种修改文化时,就会发生碎片化的情况。您将获得SchemeCommon LispELISPArc。这些都是完全不同的语言,但是它们同时都是“ Lisp”。

现在为什么社区支离破碎?好吧,我将时间和成熟度归咎于此。语言是50岁!:-)


9

Scheme和Common Lisp是标准化的。SBCL看起来像是事实上的开源Lisp,并且有很多使用它的示例。快速免费。ClozureCL看起来也不错。

PLT方案似乎就像是事实上的开源方案,并且有很多使用它的示例。快速免费。

对我来说,CL HyperSpec似乎和JavaDoc一样好。

就社区零散而言,我认为这对标准或资源几乎没有影响。我认为这与直到最近的一个相对较小的社区有关。

我认为Clojure有很大的机会成为新一代编码员的Lisp。

也许我的意思是,要使凝聚的社区产生幻觉,就需要一种非常流行的实现。


8

LISP几乎不像BASIC那样分散。

有太多的BASIC语言和版本,我已经数不清了。

即使最常用的实现(MS VB)在版本之间也有所不同。


很好,尽管在MS方面,每个新版本都打算替换旧版本。当然,这会导致使用旧版本的BASIC孤立项目的效果,因此,例如,您仍然会看到有关VB6的帖子。在MS实施之外,是否仍在使用BASIC的方言/版本?
贾斯汀·埃斯蒂尔

3
这个答案没有解决这个问题。
刘坚2010年

@Justin Ether'是否仍在使用BASIC的方言/版本仍在积极使用'-在各种收购和合并中幸存下来的DEC / VMS站点中广泛使用了它,此外,还有一些服务器商业产品都具有某种内置的基本解释器(例如IBM / Ascential DataStage)
詹姆斯·安德森

1
@ken lui,虽然我的评论未直接回答问题,但确实提供了其他数据。即Lisp不是唯一的语言,它可能有助于回答张贴者的问题
James Anderson 2010年

4

通用LISP的实现有很多,这一事实应被视为一件好事。实际上,考虑到语言的相对流行性,鉴于Common LISP的免费实现与C ++的免费实现的数量大致相同,这是非常可观的。

免费的通用LISP实现包括CMU CL,SBCL,OpenMCL / Clozure CL,CLISP,GCL和ECL。

免费的C ++实现包括G ++(具有Cygwin和MinGW32变体),数字火星,Open Watcom,Borland C ++(传统?)和CINT(解释器)。也有用于C ++的各种STL实现。

关于Scheme和Common LISP,尽管可以肯定地说,这是一个不准确的类比,但有时我会认为Scheme对Common LISP而言,C对C ++而言,即Scheme和C既小巧又优雅,而Common LISP和C ++又大又好。 (可以说)更适合大型应用程序。


3

两个可能的影响因素:

与其他语言(例如C / C ++ / Ruby等)相比,Lisp语言并没有广受欢迎-仅此而已可能会给社区造成混乱的幻想。在其他语言社区中,可能会有相等的碎片,但是较大的社区将具有较大的碎片。

Lisp语言比大多数语言更容易实现。我已经看到人们为娱乐而制作的许多“玩具” Lisp实现,许多“适当的” Lisp实现可以解决特定任务。Lisp实现的数量远远超过Python解释器(我知道.. 5,其中大多数通常可以互换)。

有一些很有前途的项目,例如Clojure,这是一种新语言,具有明确的目标(并发性),没有太多的“历史包bag”,易于安装/设置,可以搭载Java的“生态系统”库,并且具有包含文档/图书馆,并有一个官方邮件列表。这几乎消除了我不久前尝试学习Common Lisp时遇到的每个问题,并鼓励了更集中的社区。


3

有许多实现是有益的,因为每种实现在唯一的地方都是最佳的。而且现代主流语言仍然没有一种实现。考虑一下Python:它的主要实现是CPython,但是由于有了JPython,您也可以在JVM上运行Python。多亏了Stackless Python,借助微线程,您可以实现大量并发。这样的实现将在某些方面兼容:JPython与Java无缝集成,而CPython不与Java无缝集成。Ruby也一样。

您不想要具有与骨骼不兼容的许多实现。Scheme就是这种情况,您不能在实现之间共享库而无需重写大量代码,因为Schemers不能就如何导入/导出库达成共识。通用Lisp库(OTOH)由于在核心领域实现标准化而变得更易于移植,并且存在有条件地编写代码来处理每种实现的特性的设施。实际上,如今您可能会说,Common Lisp是由其实现定义的(考虑一下ASDF软件包安装库),就像主流语言一样。


我编写了一个Lisp应用程序,使用Clozure Common Lisp(CCL,以前称为MCL)将其编译为Windows可执行文件。该应用程序具有在Debian服务器上运行的许可后端,该服务器在CLISP下运行。它们具有通用的Lisp代码,并使用通用的库。相同的加密库,什么都没有。
哈兹2015年

3

我的观点是Lisp是一种小语言,因此易于实现(与Java,C#,C等相比)。

注意:许多评论认为它的确并不小,它使我无法理解。让我尝试更精确一点:这归结为切入点价格。与编译处理LISP的VM相比,构建可编译一些众所周知的主流语言的VM很难。然后,这将使围绕一个小项目的小型社区的构建变得容易。现在,该库和规范可能会或可能不会完全实现,但价值主张仍然存在。关闭它是R5RS当然不在范围内的典型示例。


好点,尤其是在计划方面。
贾斯汀·埃斯蒂尔2010年

3
...尽管我会说要实现Lisp的所有功能-甚至Scheme R5RS-可能都不如您想象的那么小或容易。
贾斯汀·埃斯蒂尔2012年

2
当然不是,您可以进入很多陷阱,但是可以与C ++ Java和类似的东西进行比较……
mathk 2012年

@JustinEthier确实,最重要的是您还有SRFI。
哈兹

1
按原始页面计数,Common Lisp的标准仍大于C的标准,尽管C正在赶上。
哈兹2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.