Lisp的诅咒

 

鲁道夫·温斯托克

 

2017年10月6日更新。注意:请停止将此提交给黑客新闻!看看这篇文章的黑客新闻搜索结果。查看第一条记录:来吧,大家!让我们再打败那匹死马一次!如果你想获得黑客新闻电子信誉,那么代替尝试提交永恒的主机

本文是将Lisp编程语言的力量与Lisp社区无法重现他们人工智能之前的冬季成就的能力相协调的一个尝试。 毫无疑问,即使在撤退期间,Lisp也是一个有影响力的思想来源。 事实上,加上不同的Lisp机器架构的辉煌,以及在旷野十多年后目前的Lisp复兴表明,Lisp游击队员必须有一些他们的沾沾自喜的理由。 然而,他们无法将Lisp的力量转化为具有压倒性动力的运动。

在本文中,我认为Lisp的表现力实际上是它缺乏动力的一个原因。

Lisp的力量是它自己最大的敌人。

这里有一个思想实验来证明这一点:使用两种编程语言,它们都不是面向对象的。如果你选择接受它,你的任务就是使它们面向对象,保持它们与原始语言向后兼容,对一些边缘情况进行模块化。在这个思想实验中插入任何一对编程语言都将表明,使用某些语言比使用其他语言更容易。这是思想实验的重点。下面是一个小例子:Intercal和Pascal。

现在让这个思维实验更有趣:想象一下将对象方向添加到C语言和方案编程语言中。制定面向对象的方案是大二学生的家庭作业。另一方面,向C添加对象方向需要bjarne stroustrup的编程技巧。

这种在所需人才和努力上的分歧导致了Lisp的诅咒:

Lisp是如此强大,以至于技术问题,其他编程语言中的问题是Lisp中的社会问题。

再考虑一下计划的情况。由于使方案面向对象变得如此简单,许多方案黑客都这样做了。更重要的是,许多个人计划黑客已经这样做了。在20世纪90年代,这导致了一个真正的面向对象语言包的仓库库存清单。单凭“选择悖论”,就保证它们都不会成为标准。现在一些方案实现有了自己的面向对象工具,情况就不那么糟糕了。然而,事实上,这些包中的许多是单独个人的工作导致了一些问题,如Olin Shivers在记录Scheme Shell时所写的问题。

个人黑客编写的程序往往遵循“抓狂”模式。这些程序将解决黑客自身所面临的问题,而不必处理问题的相关部分,这将使程序对其他人更有用。此外,该程序肯定可以在单独的黑客自己的设置上工作,但可能无法移植到其他方案实现或其他平台上的相同方案实现。可能缺少文档。从本质上说,这是一个在黑客大量空闲时间内完成的项目,如果现实生活中的责任侵入了黑客,该程序将受到损害。正如奥林所指出的,这意味着这些一人乐队项目往往能解决80%的问题。

Mark Tarver博士的文章中,Bipolar Lisp程序员,对这一现象有一个恰当的描述。 他写道,他们这些孤狼lisp黑客。

无法正确完成任务。 “扔掉设计”这个短语绝对是为BBM制作的,它来自Lisp社区。 Lisp允许您轻松地将事情搞砸,并且很容易将此视为理所当然。 10年前我在为Lisp寻找GUI时看到了这一点。 没问题,有9种不同的产品。 麻烦的是,9个中没有一个被正确记录,没有一个没有缺陷。 基本上每个人都实施了自己的解决方案,这对他有用,所以很好。 这是BBM的态度; 它对我有用,我理解它。 它也是不需要或不想让别人帮忙做某事的产物。

再一次,考虑该思想实验中的C编程语言。 由于难以使C对象面向,只有两个认真尝试的问题已经产生了任何牵引力:C ++和Objective-C。 Objective-C在Macintosh上最受欢迎,而C ++在其他地方都有规则。 这意味着,对于给定的平台,使用C的面向对象扩展的问题已经得到了明确的回答。 这意味着已经记录了这些语言的面向对象设施,集成开发环境了解它们,代码库与它们兼容,等等。

Mark Tarver博士关于双极Lispers的论文指出了这一点:相比之下,C / C ++方法是相当的不同。 用镊子和胶水做任何事情真是太难了,你所做的任何重要事情都将是一项真正的成就。 你想记录它。 此外,您在任何规模较大的C项目中都需要帮助; 所以你有可能是社交和与他人合作。 你需要的,只是为了到达某个地方。

从雇主的角度来看,这一切都很有吸引力。 十个人沟通,记录正确并且一起工作比一个BBM黑客Lisp更可取,他只能被另一个BBM(如果你能和一个)替换,在不太可能发生的情况下,他会在某个时候下降而不是可重新启动。

因此,那些已经知道C的人不会问“我应该学习什么对象系统?”相反,他们使用C++或ObjuleC取决于他们的同事在使用什么,然后转到“我如何使用面向对象的特征X”?回答:“去死吧,你会找到的。”

 

当然,真正的黑客早就知道面向对象编程并不是其支持者声称的灵丹妙药。真正的黑客已经转向更高级的概念,如不变的数据结构、类型推断、懒惰的评估、monad、箭头、模式匹配、基于约束的编程等等。真正的黑客也知道,一段时间,C和C++不适合大多数程序,不需要做任意的比特程序。然而,lisp的诅咒仍然存在。

一些自鸣得意的Lisp爱好者调查了当前的学术语言(Haskell,Ocaml等等)并发现他们想要的,说他们的任何特征要么已经存在于Lisp中,要么可以通过Lisp轻松实现 - 并进行改进宏。 他们可能是对的。

 

可惜的Lisp黑客

Mark Tarver博士 - 上面两次引用 - 写了一个名为Qi的Lisp方言。 在Clisp上面运行的宏不到一万行。 它实现了Haskell和OCaml的大多数独特功能。 在某些方面,齐超越了他们。 例如,Qi的类型推理引擎是图灵完成的。 在一个需要才华横溢的学者团队编写Haskell的世界里,一个男人,塔弗博士用他的寂寞写了Qi。

再次阅读该段落并进行推断。

为读者练习:想象一下Haskell和Common Lisp之间的激烈竞争。 接下来发生什么?

答案:Lisp Curse开始了。每个第二或第三个严重的Lisp黑客都会推出他自己的懒惰评估,功能纯度,箭头,模式匹配,类型推理以及其余的实现。 这些项目大部分都是孤狼运作。 因此,他们将拥有大多数人需要的功能的百分之八十(在每种情况下有不同的百分之八十)。 他们的记录很差。它们不会在Lisp系统中移植。在项目维护者去支付他的账单时,有些人会在被放弃之前表现出很大的希望。有几个人会在这个或那个维度上击败Haskell(在每种情况下都是不同的),但是他们的接受将受到comp.lang.lisp Usenet组的火焰战争的阻碍。

最后阶段:一个随机的旧时候Lisp黑客的宏集合将加起来一个无证的,不可移植的,错误的高达80%的Haskell实现,因为Lisp比Haskell更强大。

这个故事的寓意是二级和三级效应很重要。技术不仅影响我们在技术问题方面可以做的事情,还影响我们的社会行为。这种社会行为可以循环并影响正在考虑的原始技术问题。

Lisp是本课的一个雄辩的雄辩示例。 Lisp是如此强大,它鼓励个人独立到血腥的程度。这种独立性在Lisp Machine时代产生了惊人的创新。同样的独立性也阻碍了恢复旧的“Lisp一路向下”系统的努力;自Symbolics和LMI消亡以来,没有“Lisp OS”项目收集了大量关键数据。

这些二级和三级效应的一个结果是,即使Lisp是有史以来最具表现力的语言,理论上不可能创造出更具表现力的语言,Lispers仍然可以从其他编程语言中学习。 Smalltalk的人教会了每个人 - 包括Lisp黑客 - 关于面向对象编程的一两件事。 Clean编程语言和Mozart / Oz组合可能会有一些惊喜。

Lisp Curse与Stanislav Datskovskiy的格言并不矛盾:雇主更喜欢工人是可替代的,而不是最大的生产力。 太真实了。 任何人都很难找到管理阶层的活力。 然而,他的文章的最后几行是有问题的。

至于“自由软件”世界,它在言论中急切地反对工业教条,但在实践中却根本不反对。 多维数据集农场地狱避开的概念从未在业余群众中获得真正的吸引力。

在脚注中,他提供Linux作为不愿意追求不同想法的一个例子。 可以肯定的是,他在操作系统方面有一定的意义(最重要的评论,特别是令人愤怒的钝)。 在编程语言方面,他没有意义。 Python和Ruby受Lisp的影响。 他们的许多粉丝表达了对Lisp的尊重,他们的一些兴趣增强了Lisp的复兴。 尽管有一些正义,但JavaScript被描述为“C衣服中的Scheme”,尽管它起源于那些立方体农场地狱

尽管如此,尽管存在这种影响,但在企业和开源世界中,Lisp仍只占开发人员心目中的一小部分,而目前的高级脚本语言已经吸引了它们。 MBA的封闭思想不能成为唯一的解释。 Lisp诅咒有更多的解释力。

Lisp可用的免费开发环境进一步证明了Lisp 诅咒。

指出这一点令人尴尬,但必须要做。忘掉Lisp机器; 我们甚至没有与普通的Smalltalk黑客理所当然的开发系统相匹配(“我一直认为Lisp是优越的语言而Smalltalk是优越的环境。” -  Ramon Leon)。 除非他们支付数千美元,否则Lisp黑客仍然坚持使用Emacs。

詹姆斯·戈斯林是第一个在Unix上运行的Emacs的作者,他正确地指出,Emacs在二十多年来没有发生根本变化。 这是因为Emacs的维护人员仍在将设计上的代码分层,当Emacs是麻省理工学院AI实验室的一个研究生项目时,即当Emacs开发仍由国家债务间接资助时,这些设计已经解决。 Slashdotter可能会反对说Emacs已经非常强大,可以做任何其他开发环境可以做的事情,只有更好。 那些使用过Lisp Machines的人说不然

为什么Lisp黑客为什么不把Smalltalk的人放在适当的位置呢? 他们为什么不建立一个免费的开发系统,让人想起LispM失去的一些荣耀,即使他们无法重现另一个LispM?

这不会发生的原因是因为Lisp诅咒。 大量的Lisp黑客必须相互合作。 仔细观察:成为Lisp黑客的大量人都必须相互合作。 而且他们必须在一个从一开始就没有给定的设计上相互合作。 并且不会有任何外部纪律,例如风险资本家或其他企业主人,以使他们保持正轨。

每个项目都有成员之间的摩擦,分歧,风格和哲学的冲突。 这些社会问题是由于没有其他大型项目可以实现的。 “我们必须全都挂在一起,否则我们都会分开。”但Lisp的表现力使得这种反补贴力量变弱了; 一个人总能开始自己的项目。 因此,个别黑客认为麻烦不值得。 所以他们要么退出项目,要么不加入项目开始。 这是Lisp诅咒。

人们甚至可以通过攻击Emacs来获得足够好的东西。 因此,Lisp诅咒是更糟糕也是更好的盟友。

Lisp的表现力虽有缺点,但没有免费午餐这样的东西。

 

就像我思考和设计网站的方式一样?雇用我

Translated by Rutherd Barn
Read the original page here.