Growing a Language, by Guy Steele
字幕解读
演讲以刻意只用单音节词表达复杂观念的方式,说明编程语言中的许多概念必须由使用者逐步定义。语言不应被一次性设计成小而有限或大而笨重,而应从小处开始并为用户参与的增长预留结构。通过对比 APL、Lisp 与 Linux 的演化,主张设计可扩展的模式和工具,由维护者筛选社区贡献;在 Java 上,重点是泛型、运算符重载和轻量类型等少数机制,让用户用库构建领域能力。
英文字幕轨道 · 引文按字幕原文展示,可点时间戳回看片段。
内容要点
- 小语言难以满足现代程序需求,大语言若一次设计完成又难以快速落地;应让语言从小处开始并逐渐生长。
- 用户扩展应与内建能力保持一致的表达方式,维护者负责筛选、测试并快速整合有价值的贡献。
- 语言设计者应提供泛型、可定义运算符等增长工具,让社区通过库支持专门领域,而非把所有能力塞进基础语言。
视频章节 6
- 用简单词汇开场并定义编程语言
- 语言应当为增长而设计
- 社区参与与语言演化
- Java 需要的少数扩展机制
- 程序员也在构建工作词汇
- 简明表达带来的思考
具体观点与证据 4
语言设计应预留增长机制,把部分设计选择留给未来使用者。
并非反对设计,而是将设计对象转为持续演化的机制。
I need to design a language that can grow.用户定义的扩展与内建构造应具有一致使用形式,才能平滑扩展语言。
演讲以Lisp和APL的扩展差异作论据。
the new words defined by a library should look just like the primitives开放协作的重要价值是让设计计划随真实用户需求改变。
仍需有人筛选、验证和整合贡献,纯粹无治理并非讲者主张。
the
plan can change in real time to meet the needs少量支持泛型和用户定义操作的机制,可以替代在核心语言中硬编码大量专用类型。
这是当时对Java增长方向的设计建议,不声称其后来已全部实现。
the rest can be done with libraries, most of them built by users补充字幕原文 2
核心主张不是选择固定的小语言或完整的大语言,而是规划一个能持续扩展的语言。
I need to design a language that can grow演讲者以 PL/I 说明语言一开始包含过多内容时,复杂度会超出单个使用者的掌握范围。
No one knew all of PL/I解读边界
内容主要围绕演讲者对 Java 的语言设计主张及历史类比展开;并未给出系统的比较实验或量化证据。
相关视频与证据 2
设计权衡数组表达力强,不等于语言扩展无缝
生命游戏展示 APL 原语组合如何省去显式循环;Steele 则指出历史 APL 的用户定义与内建原语外观不一致,使社区难以无缝扩展语言。前者的表达能力并不自动解决后者的扩展接口问题。
Conway's Game Of Life in APL ↗
数组原语能紧凑表达整代更新。
you'll notice that it contains no explicit loops and no temporary variables▶ 3:11–3:29 · 观看片段Growing a Language, by Guy Steele
用户扩展是否像原语一样使用会影响语言增长。
new words defined by the user do not look like language primitives at all.适用边界 Steele 评价的是其演讲时期的 APL;不能据此断言现代 Dyalog 缺少用户函数或算子。
设计原则到实例让用户库承担语言增长
Steele要求用户定义构造像语言原语一样自然,以少数增长机制容纳多种领域需求;Unison的分布式能力与解释器让用户自行实现执行策略,把分布式编程抽象交给库作者。
Growing a Language, by Guy Steele
用户定义的扩展与内建构造应具有一致使用形式,才能平滑扩展语言。
the new words defined by a library should look just like the primitives"Unison: a new distributed programming language" by Paul Chiusano ↗
分布式编程抽象可由用户通过能力及解释器构造成库,而不必固定在语言核心。
the idea is that distributed programming should just be a library▶ 36:04–36:12 · 观看片段适用边界 Unison未被证明直接源自该演讲;远端批计算示例不等于完整解决状态型分布式服务。