为什么Lisp社区如此分散?

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

从现代的angular度来看,这很奇怪,因为现在的语言往往有明确的实现/规格。 想想Java,C#,Python,Ruby等等,每个站点都有一个权威的站点,你可以去API文档,下载等等。 当然,Lisp早于所有这些语言。 但是再一次,即使是C / C ++也是标准化的(或多或less)。

这个社区是由于Lisp时代的分裂吗? 或者也许不同的实现/方言是为了解决不同的问题? 我明白,为什么Lisp永远不会像围绕一个明确实现的语言一样团结起来,但是在这一点上Lisp社区为什么不应该朝这个方向发展呢?

Lisp社区是分散的,但其他一切都是如此。

  • 为什么有这么多的Linux发行版?

  • 为什么有这么多的BSD变种? OpenBSD,NetBSD,FreeBSD,甚至Mac OS X.

  • 为什么有这么多的脚本语言? 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 for Python,PyPy,Unladen Swallow,CL-Python,…

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

让他们中的一些人得到五十,然后看看它有多less方言和实现。

我猜Lisp是多种多样的,因为每种语言都是多样的或者变化多样。 一些开始于一个单一的实施(麦卡锡的Lisp),五十年后,你有一个动物园。 Common Lisp甚至开始于多种实现(针对不同的机器types,操作系统,使用不同的编译器技术,…)。

如今, Lisp是一个语言家族 ,而不是一种语言。 甚至没有共识什么语言属于那个家庭或没有。 可能有一些标准来检查(sexpression式,函数,列表…),但不是每个Lisp方言都支持所有这些标准。 语言devise者已经尝试了不同的function,我们得到了很多或多或less的类Lisp语言。

如果你看看Common Lisp,大概有三四个不同的活跃商业供应商。 试着让他们落后于一个提供! 将无法正常工作。 然后你有一堆活跃的开放源码实现有不同的目标:一个编译为C,另一个用C编写,一个尝试快速优化编译器,一个尝试在本地编译时有一些middlle的基础,一个是针对JVM …等等。 试着告诉维护者放弃他们的实现!

计划有大约100个实现。 许多人死亡,或大多死亡。 至less有十到二十是积极的。 有些是爱好项目。 有些是大学项目,有些是公司的项目。 用户有不同的需求 。 一个游戏需要一个实时GC,另一个需要embedded到C中,为了教育目的,只需要一个准系统结构,等等。 如何告诉开发者防止黑客实施。

还有一些人不喜欢Commmon Lisp(太大,太旧,function不够,没有面向对象,太快,不够快,…)。 有些人不喜欢Scheme(太学术,太小,不能缩放,太function,function不够,没有模块,错误的模块,不是正确的macros,…)。

然后有人需要一个Lisp与Objective-C结合,那么你就得到了Nu。 有人嘲讽.net的一些Lisp。 然后你得到一些Lisp并发和新鲜的想法,然后你有Clojure。

这是工作中语言演变 。 这就像寒武纪的爆炸(出现大量新动物时)。 有的会死的,有的会活的,有的会出现的。 在某些时候,某些方言出现了(艺术品在70年代和80年代用Lisp进行函数式编程,而在80年代用于一切MacLisp的通用Lispscheme) – 这使得一些方言主要消失即标准Lisp,InterLisp等)。

Common Lisp是Lisp方言的鳄鱼。 这是一个非常古老的devise(一亿年),几乎没有什么变化,看起来有点可怕,并不时地吃了一些年轻的…

如果你想知道更多, Lisp的演变 (和相应的幻灯片)是一个非常好的开始!

我认为这是因为“Lisp”是一种语言的广泛描述。 我所知道的所有lisp之间唯一的共同点是大多数东西在括号内,并使用前缀函数符号。 例如

(fun (+ 3 4)) 

然而几乎所有的东西都可以在不同的实现之间变化 Scheme和CL是完全不同的语言,应该这样考虑。

我认为把lisp社区叫做零散的社区就好比叫“C like”的社区是分散的。 它有c,c ++,d,java,c#,go,javascript,python和其他很多我想不到的语言。

综上所述:Lisp比实际的语言实现更像是一种语言属性(比如垃圾收集,静态types),所以像很多语言都有垃圾收集一样,Lisp类似属性的语言是很正常的。

我认为这是因为Lisp诞生了,并且保持了黑客文化的精神。 黑客文化就是要根据你的“更好”的信念采取一些东西,使其“更好”。

所以,当你有一群自以为是的黑客和修改的文化,就会发生碎片化。 你得到Scheme , Common Lisp , ELISP , Arc 。 这些都是非常不同的语言,但它们都是“Lisp”。

现在为什么社区是分散的? 那么,我会责备时间和成熟度。 语言是50岁! 🙂

Scheme和Common Lisp是标准化的。 SBCL似乎是事实上的开源lisp,并且有很多关于如何使用它的例子。 这是快速和免费的。 ClozureCL也看起来相当不错。

PLT计划看起来像事实上的开源scheme,并有大量的例子来说明如何使用它。 这是快速和免费的。

CL HyperSpec看起来和JavaDoc一样好。

就社区分散而言,我认为这对标准或资源几乎没有影响。 我认为这与迄今为止相对较小的社区有很大关系。

我觉得Clojure有很好的机会成为新一代编程人员的Lisp。

也许我的观点是一个非常受欢迎的实现,就是给出一个有凝聚力的社区幻想所需的一切。

LISP不像BASIC那样分散。

有很多方言和版本的BASIC在那里,我已经失去了计数。

即使是最常用的实现(MS VB)也是不同的版本。

Common LISP有很多实现应该被认为是一件好事。 实际上,考虑到这些语言的相对普及,考虑到Common LISP的自由实现的数量大致相同,因此免费实现C ++是非常重要的。

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

免费的C ++实现包括G ++(Cygwin和MinGW32变种),Digital Mars,Open Watcom,Borland C ++(legacy?)和CINT(interpreter)。 C ++也有各种STL实现。

关于Scheme和Common LISP,虽然可以肯定的是,一个不准确的比喻,有时我会认为Scheme是Common LISP C是C ++的,也就是说Scheme和C是小而优雅的,Common LISP和C ++是大的, (可以说)更适合更大的应用程序。

两个可能的促成因素:

与C / C ++ / Ruby等其他语言相比,Lisp语言并不是非常受欢迎 – 这一点可能会导致社区分散的错觉。 其他语言社区可能会有相同的分散性,但更大的社区会有更大的碎片。

Lisp语言比大多数人要容易实现。 我见过许多“玩具”Lisp实现,人们为了获得乐趣而做了许多“正确的”Lisp实现来解决特定的任务。 Python的解释器(我知道大约5,其中大部分通常是可互换的)

Clojure是一个有前途的项目,它是一种新的语言,具有明确的目标(并发性),没有太多的“历史包袱”,易于安装/设置,可以搭载Java库“生态系统”,具有良好的文档/图书馆,并有一个正式的邮件列表。 这很好地解决了我前一段时间学习Common Lisp时遇到的每一个问题,并且鼓励一个更集中的社区。

我的观点是,Lisp是一种小型语言,因此很容易实现(与Java,C#,C …相比)

有许多实现是有益的,因为每个实现在独特的地方是最佳的。 而现代主stream语言无论如何也没有一个实现。 想想Python:它的主要实现是CPython,但是感谢JPython,你也可以在JVM上运行Python; 感谢Stackless Python,你可以通过微线程获得巨大的并发性; 等等。这样的实现在某些方面是兼容的:JPython与Java无缝集成,而CPython则没有。 Ruby也一样。

你不想要的是有许多与骨骼不兼容的实现。 Scheme就是这种情况,在这种情况下,不能在不重写代码的情况下共享库,因为Schemers无法就如何导入/导出库达成一致。 由于核心领域的标准化,通用Lisp库OTOH更可能是可移植的,并且有条件地编写代码来处理每个实现的特性。 实际上,现在你可以说Common Lisp是由其实现定义的(想想ASDF包安装库),就像主stream语言一样。