2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Common Lisp 的悲剧:为什么大型编程语言会大到爆

  • 2019-06-28
  • 本文字数:1867 字

    阅读完需:约 6 分钟

Common Lisp的悲剧:为什么大型编程语言会大到爆

本文分析了编程语言变得过于庞大复杂的原因,并讨论了如何进行控制。


改编自2015年的es-discuss主题帖子。“Common Lisp”不是主题。它只是众多说明性反例的其中之一。


自 2007 年以来,我一直是 JavaScript 标准委员会的成员。关于TC39,我们欣赏语言简单性的价值。但是,随着时间的流逝,我们对日益增长的复杂性失去了警惕。我们必须更好地理解这是如何自然发生的,如果不加以控制,那么代价是什么,以及该怎么办。本文不仅仅针对 TC39,还针对所有那些希望影响 JavaScript 标准或任何面临类似压力的人。请从我们的错误中汲取教训!



Algol、Smalltalk、Pascal 和早期的 Scheme 语言都因为小巧美观而备受称赞。早期的 C 语言和 JavaScript 语言因为很多事情受到合理的批评,但是很少被误认为是美观的。但是,它们很小,这方面受到了恰当和广泛的赞赏。当一种编程语言很小的时候,我们欣赏它通常是因为“我可以学整个内容,然后就可以掌握它了”,然后“我知道一切。我很高兴没有我不知道的”。对于 C 语言和 JavaScript 语言,很少有人认为他们实际上知道全部内容了——事实上,细节相当复杂。尽管如此,这种感觉还是让人们对日常使用的满意度大大增加了。


JavaScript 的小巧美学贯穿 EcmaScrip-5。对于 EcmaScript-5 和 EcmaScript-2015,我都参与了很多工作,并且我为自己在这两项工作中做出的贡献感到自豪。EcmaScript-2015 的规模更大一些,尽管如此,它仍然是一种更好的编程语言。考虑到我们工作的起点,如果在规模上没有增加,那么我们不可能在 JavaScript 的实用性方面获得这些成果。对 EcmaScript-5 发展到 EcmaScript-2015 所添加的大多数新增功能,我不后悔。对其中的很多功能,如果我们把 EcmaScript-2015 标准流程重做一遍,我可能会做类似的添加工作。


把 EcmaScript-5 发展到 EcmaScript-2015,添加的每个功能都必须通过一个非常高的标准。从心理上讲,这对我们所有人都有意义,因为我们从 EcmaScript-5 这个语言开始,我们仍然可以欣赏它的小巧。当一种语言很小巧时,添加的每个功能都能直观地感觉到语言的规模大小有显著比例的增加。一个功能的特定好处对它的拥护者来说总是可以看到的。对于小巧的语言来说,人人都可以看到新功能增加复杂性的总体成本。



JavaScript 的未来?


一旦一种编程语言超过了一定的复杂度,比如 LaTex、Common Lisp、C++、PL/1 和现代 Java,那么编程体验就更像是从一个看似无尽的功能海洋中划出一部分功能供个人使用,而功能海洋中的大部分我们从不会去学习。而一旦感到一种编程语言变成无限时,新功能的特定好处仍然显而易见。但是,新功能增加复杂性的总体成本不再可见。那些讨论新功能的人不再感觉到这些。无穷加上 1 还是等于无穷。甚至,一个很大的数字加上 1 后还是一个很大的数字。这不是一刀毙命的死亡,导致了这些怪物无限制地成长。


因此,我请每个对编程语言有影响的人在考虑新功能时,设置一个更高的标准,而不只是这个标准:“如果我们也用这种方式来编写,是不是会更好?”我认为,EcmaScript-2015 处于中间地带,无限制的增长还不可避免。作为社区,我们需要对 EcmaScript-2015 已经发展到的规模有共同的恐慌感。理想情况下,随着我们的规模接近不可逆转的临界点,我们的恐慌感应该进一步增加而不是减少。

一些区别


保持小的非均匀压力


随着我们从核心语言转向标准化库,极简主义的紧迫性变得越来越弱。整个标准语言可以看作是由以下主要部分组成:


  • 基本语法——不能通过对其他语法的局部扩展忠实地解释的特殊形式

  • 语义状态——计算操作的状态

  • 内核内置——内置库中提供功能的部分,如果不存在,那么无法通过用户代码提供。

  • 非内核 intrinsics——内置在可以用 JavaScript 实现的库中,但是,语义状态或内核内置依赖这些库。比如,借助代理,能够采用用户代码实现数组(Array)。但是,其他内核内置已经特别依赖于数组,使其比任何置换都有特权。

  • 语法糖——可以通过对基本语法的局部扩展来解释的语法

  • 全局便利库——可以通过非特权用户代码实现,但是,在原始全局命名空间中给出标准的全局命名路径

  • 标准便利模块——祝福社区开发的模块成为标准


根据我对增长成本和极简主义的紧迫感,我把这些按顺序列出。对所有这些,我们仍然需要训练纪律。只是对最后一项,我们应该考虑绝对大小的增长是无限的;当我们等待候选者通过事实上的社区接受过程首先证明自身时,只限制增长率。理想情况下,TC39 无论如何都应该不再是最后一项的瓶颈,因为外部事实和法律上的过程完全能够独立地讨论和发展标准便利模块。


原文链接:


The Tragedy of the Common Lisp:Why Large Languages Explode


2019-06-28 13:3517168
用户头像

发布了 199 篇内容, 共 93.6 次阅读, 收获喜欢 295 次。

关注

评论

发布
暂无评论
发现更多内容

Lightroom Classic 2025 for Mac(LRC2025)v14.1.1中文激活版

小玖_苹果Mac软件

Axure RP 9 for Mac(交互原型设计软件)v9.0.0.3746中文激活版

小玖_苹果Mac软件

拦截烂SQL,解读GaussDB(DWS)查询过滤器过滤规则原理

华为云开发者联盟

数据库 GaussDB(DWS) #SQL

Java 开发者注意!限时招募产品体验官,100% 获得好礼

飞算JavaAI开发助手

有奖活动 开发工具 Java. AI编程

阿里P8面试官让我吃透这份10W字java面试题终于可以拿java高级岗

程序员高级码农

Java 编程 程序员 java面试 Java面试题

RTX 4090 显卡,除了打游戏还能做什么?

Finovy Cloud

gpu 显卡 云电脑

京东商品详情数据接口丨京东API接口指南

tbapi

京东API接口 京东商品详情接口

FabFilter Total Bundle 2024 for Mac(音频插件合集)v2024.12.16直装激活版

小玖_苹果Mac软件

ON1 Photo RAW 2025 .1 for Mac(照片编辑器)

小玖_苹果Mac软件

MobPush集成指南

MobTech袤博科技

微众银行携手平凯星辰荣膺金融科技创新奖,共同打造纳管千台服务器的大规模数据库运维平台

PingCAP

数据库 分布式 TiDB pingCAP

如何运用获得京东商品详情API接口搬运商品到自己的电商平台?(一篇文章全搞定)

科普小能手

数据挖掘 淘宝 电商 API 接口 API 测试

Native Instruments Maschine for Mac(全球最全面的采样器)v3.0.1激活版

小玖_苹果Mac软件

GitHub上疯传数万次的蚂蚁内部绝密分布式高可用算法笔记太香了

程序员高级码农

Java 编程 程序员 分布式 算法

NAS极速远程访问!贝锐花生壳推出飞牛fnOS专属内网穿透服务

贝锐

私有云 内网穿透

流量治理架构对比:当Kmesh遇上Ambient Mesh

华为云开发者联盟

istio #云原生 流量治理 Kmesh

B 站数据库负责人赵月顺:助力海内外业务增长,百套 TiDB 的选型与运维实战

PingCAP

数据库 分布式 TiDB

从混沌到秩序:Python的依赖管理工具分析

不在线第一只蜗牛

Python

企业组网解决方案与常用技术解析

Ogcloud

SD-WAN 企业组网 企业网络 SD-WAN组网 SD-WAN服务商

腾讯云 AI 代码助手:代码诊断应用实践

CodeBuddy

SD-WAN在企业组网中的重要作用

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SDWAN SD-WAN国际专线

AI-Native的路要怎么走?一群技术“老炮儿”指明了方向

Alter

Common Lisp的悲剧:为什么大型编程语言会大到爆_语言 & 开发_Mark S. Miller_InfoQ精选文章