HackerTube ?

Growing a Language, by Guy Steele

Bill Pugh在 YouTube 播放 ↗

字幕解读

演讲以刻意只用单音节词表达复杂观念的方式,说明编程语言中的许多概念必须由使用者逐步定义。语言不应被一次性设计成小而有限或大而笨重,而应从小处开始并为用户参与的增长预留结构。通过对比 APL、Lisp 与 Linux 的演化,主张设计可扩展的模式和工具,由维护者筛选社区贡献;在 Java 上,重点是泛型、运算符重载和轻量类型等少数机制,让用户用库构建领域能力。

英文字幕轨道 · 引文按字幕原文展示,可点时间戳回看片段。

内容要点

  • 小语言难以满足现代程序需求,大语言若一次设计完成又难以快速落地;应让语言从小处开始并逐渐生长。
  • 用户扩展应与内建能力保持一致的表达方式,维护者负责筛选、测试并快速整合有价值的贡献。
  • 语言设计者应提供泛型、可定义运算符等增长工具,让社区通过库支持专门领域,而非把所有能力塞进基础语言。
视频章节 6
  1. 用简单词汇开场并定义编程语言
  2. 语言应当为增长而设计
  3. 社区参与与语言演化
  4. Java 需要的少数扩展机制
  5. 程序员也在构建工作词汇
  6. 简明表达带来的思考
具体观点与证据 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未被证明直接源自该演讲;远端批计算示例不等于完整解决状态型分布式服务。

Hacker News 评论

查看 HN 原评论 ↗