The Postcard That Ate Six Grammars: 1980 Smalltalk-80, 1976 Make, TDD, and the Four Attractors of Agentic Coding
本文为原文前 6,000 字符的节选翻译,完整内容请查看原文。
Why did six modern AI prompt grammars—Graphviz digraphs, SysV /etc/init.d cards, Gherkin scenarios, EBNF speech-act rules, Belnap epistemic tables, and rewind checklists—all collapse into a single 1980 Smalltalk-80 keyword message cascade? Because Alan Kay and Dan Ingalls solved the static serialization of algorithms and data structures on the back of a postcard forty years before anyone built a Transformer.
为什么六种现代人工智能提示词语法——Graphviz 有向图、SysV /etc/init.d 卡片、Gherkin 场景、EBNF 语音行为规则、Belnap 认知表和重绕检查表——最终都坍缩成了一种 1980 年的 Smalltalk-80 关键字消息级联?因为 Alan Kay 和 Dan Ingalls 在 Transformer 出现四十年前,就在一张明信片的背面解决了算法和数据结构的静态序列化问题。
“It’s fascinating that for decades, we tried to work out ‘similar text’ through complex algorithms, and now that we have cosine-similarity, nobody recognizes fully how to use it. If anything defines the past few years, it’s ‘cheap cosine similarity’, now in hardware.” — Randal L. Schwartz
“令人着迷的是,几十年来我们一直试图通过复杂的算法来解决‘文本相似度’问题,而现在我们有了余弦相似度,却没人完全意识到该如何使用它。如果说过去几年有什么定义性特征的话,那就是‘廉价的余弦相似度’,现在它已经集成在硬件中了。”—— Randal L. Schwartz
“I’ve learned more than 90% of the devs about how LLMs work. I may even know more than most of the ‘experts’ at the labs, since I’m a field engineer… Without control surfaces, a bigger engine just means the plane still noses into the river—just more accurately, or at a greater carbon footprint.” — Randal L. Schwartz
“我对大语言模型工作原理的了解超过了 90% 的开发者。我甚至可能比实验室里大多数‘专家’知道得更多,因为我是一名现场工程师……如果没有控制面,引擎再大也只会让飞机更精准地坠入河中,或者产生更大的碳足迹。”—— Randal L. Schwartz
“Wait a minute. In 1980, Alan Kay and Dan Ingalls designed a syntax that fits on the back of a postcard, has only three message precedences (unary, binary, keyword), has zero grammar ambiguity, serializes live call-stack frames (thisContext) to disk via #storeString, logs append-only atomic deltas via .changes, and compacts memory via Smalltalk condenseChanges… What happens if we replace all six notations with 1980 Xerox PARC Smalltalk-80?” — Randal L. Schwartz
“等等。1980 年,Alan Kay 和 Dan Ingalls 设计了一种可以写在明信片背面的语法,它只有三种消息优先级(一元、二元、关键字),零语法歧义,通过 #storeString 将实时调用栈帧 (thisContext) 序列化到磁盘,通过 .changes 记录仅追加的原子增量,并通过 Smalltalk condenseChanges 压缩内存……如果我们用 1980 年的 Xerox PARC Smalltalk-80 替换掉所有这六种符号,会发生什么?”—— Randal L. Schwartz
“The stack is 40 years old and none of it was invented for LLMs.” — Francisco Grandón (@fgrandon)
“这个栈已经有 40 年历史了,其中没有任何东西是为大语言模型发明的。”—— Francisco Grandón (@fgrandon)
⚡ TL;DR (For the Impatient Systems Architect) The Great Historical Inversion: From 1975 to 2018, computer scientists tried to fake fuzzy semantic similarity using complex deterministic algorithms (Soundex, Levenshtein, TF-IDF) and hit a wall—while deterministic state machines (make, Smalltalk VMs, compiler ASTs) were already 100% solved. Now that GPUs and TPUs finally gave us cheap cosine similarity in hardware, the software industry threw away the deterministic state machines and tried to use fuzzy cosine similarity to fake for loops, call stacks, and dependency graphs.
⚡ 长话短说(致急躁的系统架构师):伟大的历史倒置:从 1975 年到 2018 年,计算机科学家试图使用复杂的确定性算法(Soundex、Levenshtein、TF-IDF)来模拟模糊语义相似度,结果碰了壁——而确定性状态机(make、Smalltalk 虚拟机、编译器 AST)早已被 100% 解决。现在,GPU 和 TPU 终于在硬件层面为我们提供了廉价的余弦相似度,软件行业却抛弃了确定性状态机,试图用模糊的余弦相似度来模拟循环、调用栈和依赖图。
Why Six Notations Collapsed Into One 1980 Postcard: Across Parts 3.6 through 4.1, our agent control plane accumulated six different notations (Makefile, SysV /etc/init.d Markdown cards, Graphviz strict digraph, Cucumber Gherkin, RFC 5234 EBNF speech acts, and Belnap 4-valued tables). Maintaining six parsers created boundary friction. Why did 1980 Xerox PARC Smalltalk-80 eat the inner five while pairing with 1976 Make on the outside? Because Niklaus Wirth’s Algorithms + Data Structures = Programs requires a static syntax that represents both data and deferred execution without ambiguity.
为什么六种符号坍缩成了一张 1980 年的明信片:在第 3.6 到 4.1 部分中,我们的代理控制平面积累了六种不同的符号(Makefile、SysV /etc/init.d Markdown 卡片、Graphviz 严格有向图、Cucumber Gherkin、RFC 5234 EBNF 语音行为和 Belnap 四值表)。维护六个解析器产生了边界摩擦。为什么 1980 年的 Xerox PARC Smalltalk-80 吞并了内部的五种符号,同时在外部与 1976 年的 Make 配合使用?因为 Niklaus Wirth 的“算法 + 数据结构 = 程序”需要一种静态语法,能够无歧义地表示数据和延迟执行。
Unlike 1960 Lisp (which overloaded (…) and needed special forms and macros, suffering Dyck-1 closing-parenthesis drift )))) on smaller models) and 1988 Tcl / 1990 expect (where {…} is an unparsed string vulnerable to uplevel scope loss), Smalltalk separates eager grouping (…) from 2-byte lexical BlockClosures [:x | …]. Every control structure (ifTrue:ifFalse:, whileTrue:, on:do:) is an ordinary keyword message send, allowing #storeString and .changes chunks to serialize live call stacks (thisContext) and execution state machines in one grammar that fits on a postcard.
与 1960 年的 Lisp(它重载了 (…) 并需要特殊形式和宏,在较小模型上容易出现 Dyck-1 右括号漂移 )))))以及 1988 年的 Tcl / 1990 年的 expect(其中 {…} 是未解析的字符串,容易导致上层作用域丢失)不同,Smalltalk 将急切分组 (…) 与 2 字节的词法 BlockClosures [:x | …] 分离开来。每个控制结构(ifTrue:ifFalse:, whileTrue:, on:do:)都是普通的关键字消息发送,这使得 #storeString 和 .changes 代码块能够将实时调用栈 (thisContext) 和执行状态机序列化为一种可以写在明信片上的语法。
The Suite 8 3-Arm Controlled Shootout (N = 360 Trials Inside Our 2,040-Trial Benchmark): Under ~16,000 tokens of realistic compiler and diff distractor load across four model tiers (gemini-3.5-flash-lite, gemini-3.8-flash, gemini-3.1-pro-preview, and gemini-4-argon), Arm A (English Prose + Gherkin + init.d) scored 2.5% (3/120), Arm B (Common Lisp S-Expressions) scored 91.7% (110/120, dropping to 66.7% on flash-lite due to optional &key omission and )))) parenthesis drift), and Arm C (Smalltalk-80 Keyword Cascades) hit 100.0% (120/120, z = 15.11, p < 0.0001 vs. Prose; z = 3.23, p = 0.0012 vs. Lisp). In Smalltalk, omitting the sad-path branch onFailure: changes the selector from #state:invariant:onSuccess:onFailure: to #state:invariant:onSuccess:—an immediate compile-time MessageNotUnderstood error.
Suite 8 三组受控对比测试(在我们 2,040 次试验基准测试中的 360 次试验):在跨越四个模型层级(gemini-3.5-flash-lite, gemini-3.8-flash, gemini-3.1-pro-preview, 和 gemini-4-argon)约 16,000 个 token 的真实编译器和差异干扰负载下,A 组(英语散文 + Gherkin + init.d)得分为 2.5% (3/120),B 组(Common Lisp S-表达式)得分为 91.7% (110/120,在 flash-lite 上因可选 &key 省略和 )))) 括号漂移降至 66.7%),而 C 组(Smalltalk-80 关键字级联)达到了 100.0% (120/120, z = 15.11, p < 0.0001 对比散文;z = 3.23, p = 0.0012 对比 Lisp)。在 Smalltalk 中,省略 onFailure: 失败路径分支会将选择器从 #state:invariant:onSuccess:onFailure: 更改为 #state:invariant:onSuccess:——这会立即触发编译时的 MessageNotUnderstood 错误。
Seven Live Production Flight Tests (FT-236 Through FT-242 — Over 6,400 Combined Steps Across Two Cohorts): We flight-tested the Smalltalk-80 thisContext Image Bootloader (baseline.sources + changes-*.changes + Smalltalk condenseChanges) across seven consecutive production tickets (4 in open-source BlocSignal and 3 in a commercial enterprise medical-imaging monorepo), bringing our cumulative ledger to 250 evaluated tickets (144 Cohort A + 106 Cohort B), 0.0% repeat regression rate (0/250), 1.88 mean Socratic nudges, and 607 codified scars (syntheticscars.org).
七次实时生产飞行测试(FT-236 到 FT-242 —— 两个队列共计超过 6,400 个步骤):我们对 Smalltalk-80 thisContext 镜像引导程序(baseline.sources + changes-*.changes + Smalltalk condenseChanges)进行了七次连续生产工单的飞行测试(4 次在开源 BlocSignal 中,3 次在商业企业医学影像单体仓库中),使我们的累计记录达到 250 个评估工单(144 个 A 队列 + 106 个 B 队列),重复回归率为 0.0% (0/250),平均苏格拉底式引导为 1.88 次,并记录了 607 个编码伤痕 (syntheticscars.org)。
The Four Irreducible Attractors of Agentic Coding: Strip away every prompt fad of 2023–2026 and four orthogonal, 40-year-old foundations remain: (1) 1976 Stuart Feldman Make, (2) 1980 Alan Kay & Dan Ingalls Smalltalk-80, (3) 1994/1999 Kent Beck SUnit / TDD, and (4) Clean-Room Six-Pillar Adversarial Review + Somatic Scars.
代理编码的四个不可约吸引子:剥离 2023-2026 年间所有的提示词热潮,剩下四个正交的、40 年历史的基础:(1)1976 年 Stuart Feldman 的 Make,(2)1980 年 Alan Kay 和 Dan Ingalls 的 Smalltalk-80,(3)1994/1999 年 Kent Beck 的 SUnit / TDD,以及(4)净室六柱对抗性审查 + 躯体伤痕。
-
The Great Historical Inversion: Cheap Cosine Similarity in Hardware In Part 4.1, we ended with a teaser: what happened when we replaced six separate agent control-plane notations with 1980 Xerox PARC Smalltalk-80? To understand why a 46-year-old programming language from Palo Alto is the missing execution fabric for 2026 Large Language Models, step back and look at the forty-year arc of computer science. From 1975 to 2018, programmers knew how to build deterministic state machines in our sleep. Stuart Feldman gave us make in 1976; Dan Ingalls and Alan Kay gave us the Smalltalk-80 virtual machine in 1980; compiler writers gave us LALR parsers, static type checkers, and SSA control-flow graphs. None of those ever “forgot” what step of a loop they were on or hallucinated a method name. What we could not do from 1975 to 2018 was fuzzy semantic similarity. For four decades, we threw every deterministic algorithm we could think of at the problem o
-
伟大的历史倒置:硬件中的廉价余弦相似度。在第 4.1 部分中,我们以一个预告结束:当我们用 1980 年的 Xerox PARC Smalltalk-80 替换掉六种独立的代理控制平面符号时,发生了什么?要理解为什么这种来自帕洛阿尔托的 46 年历史的编程语言是 2026 年大语言模型缺失的执行架构,请退后一步,审视计算机科学四十年的发展轨迹。从 1975 年到 2018 年,程序员们闭着眼睛都知道如何构建确定性状态机。Stuart Feldman 在 1976 年给了我们 make;Dan Ingalls 和 Alan Kay 在 1980 年给了我们 Smalltalk-80 虚拟机;编译器编写者给了我们 LALR 解析器、静态类型检查器和 SSA 控制流图。这些东西从来不会“忘记”自己处于循环的哪一步,也不会产生方法名幻觉。我们从 1975 年到 2018 年无法做到的是模糊语义相似度。四十年来,我们将能想到的每一种确定性算法都投入到这个问题中……