可能的重复:
为什么 Lisp 社区如此分散?
尽管语气尖刻,但我实际上正在寻找一个严肃的答案。
我知道教科书上的回答:Lisp 是一种计算模型,而不是一种“语言”本身。那么,为什么 Lisp 会有这么多不同的方言呢?
据推测,这并不是因为表面语法问题或关键的缺失功能,就像许多其他语言一样。但如果不是这样,那又怎样呢?
他们对计算模型的解释是否略有不同?他们是否追求不同的简单性与效率权衡?是因为不同编译器/解释器代码库的限制吗?或者像我这样的非 Lispers 完全无法想象的其他东西?
我想接下来的问题是:如果差异很重要,那么哪一个是最适合现实世界使用的现代 Lisp?
谢谢,厄尼博士
Lisp 出现多种方言的原因有很多,有些是历史原因,有些是技术原因,有些主要是心理原因。
历史:按照经典标准,Lisp 相当慢并且使用大量内存。很多人设计了各种技术(或者腐败,如果你不喜欢它们)来尝试使其更加实用。在构建 Lisp 机器时尤其如此——硬件是专门为运行 Lisp 而设计的,同时,它们运行的 Lisp 也是专门为在该硬件上运行并充分利用其优势而设计的(修订版?)能力。
技术:Lisp 中有时做出的一些决定是有问题的(说得好听一点)。例如,所有现代 Lisp 都使用词法作用域,但相当多的早期 Lisp 使用动态作用域。一些Scheme 用户不太重视大多数其他Lisp 方言中的非卫生宏。
心理:Lisp 非常简单,以至于很多人都觉得有资格编写自己的实现。许多 Lisp 程序员也喜欢实验和追求完美,因此许多实现都包含了实现者对各种(通常是不兼容的)改进的想法。没有人协调工作,因此许多扩展/更改以各种方式彼此不兼容,因此每种扩展/更改都成为(或多或少)独特的方言。其中有些可能是可以避免的,但有些则不然——例如,两个人可能会认为某个特定功能有缺陷。一个人会努力将其改进为他认为更容易接受的东西,而另一个人则将其完全删除,并且要么认为这本身就是一种改进,要么可能设计出完全不同的东西来取代它。
沟通不畅也往往是一个原因。(比如说)麻省理工学院的某个人可能会在休假期间去某个地方,并随身携带一些 Lisp 实现的磁带,无论他们走到哪里,这些磁带都会开始使用。这通常会(非常无意地)分叉实施,因为两所学校确实并行独立工作。