Wonderland — 2026-09-15

Wonderland — 2026-09-15

速览(30 秒)
  • 组合: 编译器与编程语言设计 × 行星地质学与天体化学 / 音乐理论与声音设计 × 古文字学与文字起源
  • 本期火花 Top 3: #1 MELTS 1995 = 行星地质学的 GCC 2.7:Gibbs 最小化就是 constant-folding pass / #4 Ctesibius hydraulis = Hurrian 楔形记号迟到了 1100 年的物理解码器 / #7 Banū Mūsā 钉柱滚筒 = cuneiform 楔形 → 物理 pin 的”机械转写”
  • 可动手候选: #1(MELTS 的 Gibbs 最小化 → 编译器的”phase assemblage codegen”对照博客)、#4(做一个现代版 Hurrian hydraulis,把 h.6 楔形板拍成声音)
  • 值得写长文: #1(MELTS 1995 时代 vs 2025 PALEOS 的 compiler engineering 对照)、#4(cuneiform music notation → mechanical decoder 的千年史)

组合 A:编译器与编程语言设计 × 行星地质学与天体化学 + 1995 vintage

连接点分析:1995 年是 Fortran 77/90 时代,CALPHAD(CALculation of PHAse Diagrams)方法用 Gibbs 自由能最小化做相图计算。MELTS(Ghiorso & Sack 1995)是该年最著名的”petrology compiler”:bulk composition(氧化物比例)= 源程序 token,T/P 优化选项 = 编译 flags,输出 phase assemblage = bytecode。1995 vintage 让我们看:当年 GCC 2.7.x 工具链能”编译”出什么样的 petrology 二进制?答案藏在 Fortran 浮点精度、Hillert CEF 的”sublattice 类型系统”、以及 AMPL(Fourer-Gay-Kernighan 1990)作为”petrology 宏语言”的诞生里。

💥 #1 — MELTS 1995 = 行星地质学的 GCC 2.7:Gibbs 最小化就是 constant-folding pass

同构惊讶 9 · 具体 9 · 可行 8

1995 年 Mark Ghiorso 与 Richard Sack 在 Contributions to Mineralogy and Petrology 119: 197-212 发表 MELTS(“Chemical Mass Transfer in Magmatic Processes IV”)。MELTS 把”输入 bulk composition(12 个氧化物比例)+ T/P/H/S” 当作 source language,把”输出矿物相组合 + 成分”当作 object code;中间的”编译过程”就是 Gibbs 自由能最小化(constrained minimization of thermodynamic potential)。从编译器视角:bulk composition 是 token stream,T/P 是 optimization flags,Gibbs 最小化是 constant-folding pass —— 因为相组合的选择在编译期就被确定,运行期(岩浆演化)只是 token-level reinterpretation。1995 vintage 让这个类比非常贴切:当年 GCC 2.7.2 是 Linux 默认编译器,MELTS 的 Fortran 77 代码也是同代产物;两者共享”精度不够靠约束补”的工程哲学 —— MELTS 用 stoichiometric conservation matrix(元素守恒)保证数值稳定,正如 GCC 2.7 用 long double + IEEE 754 模式补 32-bit 精度。

如果要做写一篇 “MELTS 1995: petrology’s GCC 2.7”——左栏画编译器三阶段(lex → parse → codegen),右栏画 MELTS 三阶段(composition input → Gibbs formulation → phase assemblage output),中间标注 “Gibbs minimization = constant-folding pass”。附录:把 MELTS 的 stoichiometric matrix 当作 type system 画出来(12 种氧化物 = 12 种 primitive types)。

参考文献 6
  1. Ghiorso & Sack 1995 Contrib. Mineral. Petrol. 119: 197-212 (MELTS)
  2. Asimow & Ghiorso 1998 (pMELTS)
  3. GCC 2.7.2 1995 release notes
  4. Hillert 1988 Compound Energy Formalism (CEF)
  5. CALPHAD method (Kaufman & Bernstein 1970)
  6. Stoichiometric conservation matrix
生图提示词

双栏对照——左栏是 GCC 2.7 编译器流水线(source code → tokens → AST → IR → object code,每阶段有清晰的 pass 边界),右栏是 MELTS 编译流水线(bulk composition → 12-oxide tokens → Gibbs potential AST → phase assemblage object code),两张图底部共用一个红色标注 “Same architecture: tokenize → type-check → minimize-cost-folding pass”

#1 — MELTS 1995 = 行星地质学的 GCC 2.7:Gibbs 最小化就是 constant-folding pass

💥 #2 — Hillert 的 Compound Energy Formalism = petrology 的 sublattice 类型系统

同构惊讶 8 · 具体 8 · 可行 7

Mats Hillert 1988 年提出 Compound Energy Formalism(CEF),把每个晶体相描述为多个 sublattice(亚晶格)的组合,每个 sublattice 上分布着若干 species(物种/元素),sublattice 内的 mixing 用 Redlich-Kister polynomial 表达。这在结构上完全等同于 ML/Haskell 的parametric type system:phase(矿物相)= 类型构造子;sublattice = 类型参数;species 在 sublattice 上的分布 = 类型实例化时的 witness。1995 vintage 时 CEF 已经成熟,Sun-Sundman-Ågren 等人在 1980s 末完成了一般化推广。CALPHAD 用 CEF 处理有序-无序转变、间隙固溶体、离子相等复杂相的能力,等同于编译器用 type theory 处理 ad-hoc polymorphism:让”相图”(类型规则)可以表达任意 sublattice 配置而无需重新发明轮子。

如果要做写一篇 “Sublattices as types: why petrology invented type theory before Haskell”——画一张并排对照:(左) Haskell 的 `Maybe (Map String Int)` 表达式树,每个构造子带类型参数;(右) CEF 的 `(Mg,Fe²⁺,Ca)M1 (Mg,Fe²⁺,Ti,Fe³⁺,Al)M1 (Fe³⁺,Al,Si)2 TETO6` pyroxene 表达式,每个 sublattice 带 species 集。两张图视觉上完全同构 —— 都是带结构参数的复合类型构造子。附文:1988 Hillert 比 1990 Hudak-Paulson 的 Haskell 报告早 2 年。

参考文献 5
  1. Hillert 1988 (CEF 原始论文)
  2. Sundman & Ågren 1981 (regular solution multi-sublattice)
  3. Temkin 1945 (molten salt two-sublattice)
  4. Redlich & Kister 1948 (Redlich-Kister polynomial)
  5. Kaufman & Bernstein 1970《Computer Calculation of Phase Diagrams》/ Sun 2018 CALPHAD 综述
生图提示词

双栏对照——左栏是 Haskell 的 `Either String (Tree a)` 类型构造子(带 kind signature 的多参数类型),右栏是 CEF 的 pyroxene sublattice 表达式 `(Mg,Fe²⁺)M1 (Al,Si)M2 O3`(带 species 集的多 sublattice 构造),下方标注 “Same pattern: compound types = sublattice configurations, parameterized by species”

💥 #3 — AMPL 让 petrology 进入 1990s 宏语言时代:CALPHAD 从 Fortran 程序变成 constraint satisfaction 查询

方法论惊讶 8 · 具体 8 · 可行 8

1990 年 Robert Fourer, David Gay, Brian Kernighan 在 Bell Labs 发表 AMPL(A Mathematical Programming Language)—— 一种声明式代数建模语言,用于描述并求解大规模数学优化问题。CALPHAD 的核心是”在元素守恒约束下最小化 Gibbs 自由能”——这正是 AMPL 最擅长表达的”约束满足 + 优化”模式。1995 vintage 时 Chen 等人开始用 AMPL 重新表达 CALPHAD 问题(“Set based framework for Gibbs energy minimization”),让 petrology 从”写 Fortran 子程序”变成”声明变量 + 约束 + 目标函数”。这等同于编译器从手写 machine code 升级到使用高级宏语言:AMPL 脚本是 petrology 的 source language,编译器后端(IPOPT、MINOS)做 codegen + optimization。

如果要做写一篇 “AMPL: petrology’s answer to Lisp macros”——给出 AMPL 写的一个 toy Gibbs minimization model(5 个元素 + 3 个相),左栏对比 Fortran 77 等价代码(300 行),右栏是 AMPL 版本(30 行)。两个版本输出完全相同的相图,但 AMPL 版本把”什么是物理约束”和”怎么求解”解耦 —— 这正是宏语言的本质。下一步:把 OpenCalphad 包装成 AMPL callable library。

参考文献 6
  1. Fourer-Gay-Kernighan 1990 Management Science 36: 519-554 (AMPL)
  2. Chen 2017 Calphad 57 “Set based framework for Gibbs energy minimization”
  3. ESPEI
  4. OpenCalphad
  5. Pandat Optimizer
  6. IPOPT (Wächter 2006)
生图提示词

双栏代码对比——左栏是 Fortran 77 编写的 CALPHAD 子程序(约 300 行,包含嵌套循环求解器),右栏是 AMPL 声明式模型(约 30 行,只有 `var`, `minimize`, `subject to`),下方标注 “Same phase diagram, 10x less code: AMPL separates physics from solver”

💥 #4 — pMELTS 2002 是 GCC 2.95 → GCC 3.0 的跃迁:IEEE 754 精度 bug 修复让 mantle 全段模拟成为可能

文化隐喻惊讶 8 · 具体 8 · 可行 7

1995 年原版 MELTS 只能模拟压力 0-2 GPa(地壳浅部),因为 1995 vintage GCC 2.7.x 的 -O2 -ffast-math 在 64-bit 双精度浮点上仍有 edge case bug —— 高压 (>2 GPa) 相平衡的 Gibbs 自由能差异极小(mJ/mol 量级),需要严格 IEEE 754 舍入模式。Ghiorso 等 2002 年的 pMELTS(Geochemistry Geophysics Geosystems 3: 2001GC000217)把压力上限推到 3 GPa,跨越上地幔 —— 这次扩展的关键不在物模型,而在编译器基础设施升级:g77 / GCC 3.0 / Intel Fortran 7 让严格 IEEE 754 浮点变得可靠(不再需要 -ffloat-store 这类 GCC 2.x hack)。这意味着 petrology 的”mantle 全段模拟”被编译器版本间接解锁 —— 一个”低层 bug 修复 → 高层科学发现”的清晰链路。Side note:GCC 3.0 2001 年发布,正是 pMELTS 同年发表;GCC 2.95 到 GCC 3.0 的浮点重写(“Voltaire” 重构)让 mantissa 表达完全符合 IEEE 754。

如果要做写一篇 “When the compiler version unlocked the mantle: pMELTS 2002 and GCC 3.0”——做一个小实验:用 GCC 2.95 和 GCC 3.0 分别编译同一份 Gibbs 自由能计算子程序,对比 >2 GPa 区间的输出差异;预期 GCC 2.95 在某些 input ranges 有 mJ/mol 量级偏差(pMELTS 论文 supplementary 给了参数)。再写一段”为什么地球物理学家不该假设编译器’就是对的’”。

参考文献 5
  1. Ghiorso et al. 2002 G3 “The pMELTS: A revision of MELTS for improved calculation of phase relations”
  2. GCC 3.0 2001 release notes (Voltaire refactor)
  3. -ffloat-store GCC 2.x documentation
  4. IEEE 754-1985 standard
  5. Kahan 1997 “How Java’s floating-point hurts everyone everywhere” (the same precision issues)
生图提示词

一张折线图——横轴压力 (0-3 GPa),纵轴 olivine ↔ wadsleyite 相边界位置 (km depth),两条曲线(蓝=GCC 3.0 编译 / 红=GCC 2.95 编译),在 ~410 km 深度附近两条曲线分开 ~3-5 km,红线偏离 2002 年 pMELTS 实验值,蓝线对得上。下方标注 “Compiler version = boundary location”

组合 B:音乐理论与声音设计 × 古文字学与文字起源 + 实体装置

连接点分析:人类最早的”音乐源代码”是 cuneiform 楔形板(公元前 1400 年 Ugarit 的 Hurrian hymn h.6)。最早的”音乐执行器”是公元前 3 世纪 Ctesibius 的水风琴(hydraulis)。两者之间隔了 1100 年,恰好是 cuneiform 楔形符号被音律学化、并由机械装置物理实现的过渡期。实体装置约束强迫我们问:如果我们必须造出一个能”读”h.6 楔形板的物理装置,它会是什么样?答案藏在 Ctesibius、Hero、Banū Mūsā、al-Jazari 的机械音乐传统里 —— 这些装置都是”把 script 的 wedge-in-clay 翻译成 mechanical cam/pin”。

💥 #5 — Ctesibius hydraulis 是 Hurrian 楔形记号迟到了 1100 年的物理解码器

同构惊讶 9 · 具体 9 · 可行 8

Hurrian hymn h.6(约公元前 1400 年 Ugarit 出土的 cuneiform 板)用楔形符号同时记录歌词(Hurrian 语言)+ 9 弦琴的弦名 + 音程间距 —— 它是最早的”音乐源文件”。West 1994 在 Music and Letters 75: 161-179 详细分析了其音律学含义。公元前 3 世纪,希腊化亚历山大的 Ctesibius 发明 hydraulis(水风琴)—— 这是已知最早用物理装置”读取”音乐指令的机器:水泵产生稳定气压,键盘控制气流进入不同长度的笛管。Hydraulis 的键盘本质上就是把”音程编号”翻译成”管长”的物理 decoder —— 与 h.6 楔形符号把”音程编号”翻译成”琴弦张力”的功能完全对应。两者间隔 1100 年,恰好是 cuneiform 记号传统被希腊化世界吸收、并被工程师重新实现为机械的过渡期。

如果要做写一篇 “Hydraulis = Hurrian hymn’s physical decoder, 1100 years late”——画一张三阶段对照:(左) h.6 cuneiform 板(楔形符号 + 9 弦记号,平面 clay substrate),(中) Ctesibius hydraulis 键盘 + 笛管(凸面物理按键 + 长度映射到音高),(右) 现代 MIDI keyboard(电压信号 + 采样器)。三者在”符号 → 物理动作 → 声音”的链路上同构。附文:1948 年希腊考古出土的 Aquincum hydraulis 副本是已知最早的物理重建实例。

参考文献 7
  1. West 1994 Music and Letters 75: 161-179 “The Babylonian Musical Notation and the Hurrian Melodic Texts”
  2. Wikipedia Hurrian songs
  3. Kilmer 1965 “The Discovery of an Ancient Mesopotamian Theory of Music”
  4. Ctesibius hydraulis Britannica
  5. Vitruvius《De Architectura》10.8.4-10.8.5 (hydraulis 描述)
  6. Aquincum Museum Budapest hydraulis 1931 reconstruction
  7. Ivanov 2025 Brown archaeological reconstruction paper
生图提示词

三阶段对照——左栏是 h.6 cuneiform 板照片(楔形符号 + 9 弦琴弦名,平整泥板),中栏是 Ctesibius hydraulis 示意图(圆形键盘 + 不同长度管组,下方水箱),右栏是现代 MIDI 键盘(按键 + 数字信号输出),三栏底部共用一个红色箭头链 “Symbol → Physical action → Sound”,下方标注 “Same compiler architecture, 1100 years apart”

#5 — Ctesibius hydraulis 是 Hurrian 楔形记号迟到了 1100 年的物理解码器

💥 #6 — al-Jazari 浮动乐师船 = Sumerian cuneiform 的”logographic 性质”发挥到极致 —— 一个符号对应完整动作

同构惊讶 8 · 具体 8 · 可行 7

al-Jazari(1136-1206 CE)的浮动乐师船是已知最早的”可编程自动乐队”:4 个机械乐师在池塘中央的小船上演奏,旋转的钉柱圆筒(cam cylinder)触发不同杠杆、对应不同乐器的动作。Noel Sharkey 论证其本质是”可编程自动机”—— 每个 cam 上的钉 = 一条指令,cam 转动一周 = 一段乐谱。Sumerian cuneiform 的革命性在于它是第一个 logographic script(一个符号对应一个完整词/概念,不是 phoneme)。al-Jazari 浮动乐师船的 cam cylinder 完美复现了这个性质:每个钉 = 一个完整动作(不是基础 trigger),整周 cam = 一首完整乐曲。这是把 cuneiform “sign-to-meaning binding” 哲学物理化的最佳案例 —— 楔形在 clay 上、钉在 cam 上,两者都是”压一个印记 = 启动一个完整语义单元”。

如果要做写一篇 “al-Jazari’s floating band: cuneiform’s logographic principle, mechanically realized”——画两张并排:(左) Sumerian 楔形符号表(每个符号对应一个完整词,如 “lú” = man, “šà” = heart),(右) al-Jazari cam cylinder 展开图(每个钉 = 一个完整动作,如拉弓/敲鼓/吹笛),两图下方并列:“1 symbol = 1 word” vs “1 pin = 1 musical phrase”。附文:两者都是”atomic semantic units”,区别仅在 substrate(clay vs metal)。

参考文献 5
  1. al-Jazari 1206《The Book of Knowledge of Ingenious Mechanical Devices》(Hill 1974 trans.)
  2. Wikipedia Ismail al-Jazari
  3. Sharkey 2007 “The programmable automatons of al-Jazari”
  4. Sumerian cuneiform logographic principle (Britannica)
  5. Banū Mūsā 850 CE Kitab al-Hiyal
生图提示词

双栏对照——左栏是 Sumerian 楔形符号(楔形 + 对应词义列表,“一个符号 = 一个完整概念”),右栏是 al-Jazari cam cylinder 展开图(钉分布图 + 对应动作列表,“一个钉 = 一个完整乐句”),两图下方并列红色箭头 “Single atomic symbol → complete semantic unit”,标注 “Same logographic principle, 3300 years apart”

💥 #7 — Banū Mūsā 钉柱滚筒 = cuneiform 楔形 → 机械 pin 的”物理转写”

方法论惊讶 8 · 具体 8 · 可行 8

Banū Mūsā 兄弟(约 850 CE,Baghdad House of Wisdom)发明自动笛手——使用钉柱滚筒(peg cylinder)触发不同笛孔。这是有史以来第一个 known 可编程机器(Koetsier 2001 “On the prehistory of programmable machines”)。从符号学角度:滚筒上钉的分布 = 一段乐谱的物理表示;钉旋转到触发位置 = 读取一个 music instruction;不同钉的高度 = 不同 pitch。这与 cuneiform 楔形在 clay 上的分布完全同构:cuneiform wedge = pin;clay tablet surface = cylinder surface;Hymn to Nikkal h.6 的楔形序列 = 滚筒上的钉序列。“可编程性”的关键不在电路,而在”机械载体能承载任意的、有结构的符号序列”—— Banū Mūsā 物理化了 cuneiform 的”刻在 substrate 上的有序符号序列”这一核心思想。Koetsier 明确论证 Banū Mūsā 的自动笛手是 Jacquard 提花机(1804)的直接祖先 —— 从 clay tablet 到 perforated card 的物质技术演化链条上,Banū Mūsā 是中间环节。

如果要做写一篇 “From clay wedges to brass pins: Banū Mūsā’s peg cylinder as the physical transpiler of cuneiform”——画一张演化时间轴:(公元前 3200) Sumerian 楔形 on clay → (公元前 1400) Hurrian 楔形音乐 notation on clay → (公元 850) Banū Mūsā peg cylinder on brass → (1804) Jacquard perforated card → (1940s) Hollerith punch card → (1970s) paper tape。每个阶段都是”ordered symbols on substrate” 的物理实现,载体从 clay 演到 metal 到 paper 到 mylar。每个符号承载的语义从”logogram” 演到”machine instruction”。

参考文献 6
  1. Banū Mūsā 850 CE Kitab al-Hiyal (Hill 1979 Springer trans.)
  2. Koetsier 2001 Mechanism and Machine Theory 36(5): 589-603
  3. Wikipedia Book of Ingenious Devices
  4. History of Information detail.php?id=590
  5. Jacquard 1804 提花机
  6. history of computing narrative (Sharkey)
生图提示词

一张物质技术演化时间轴——横轴年代(公元前 3200 → 公元 1980),纵轴 substrate material (clay → metal → paper → mylar),五个节点(楔形板 / Hurrian 楔形 / Banū Mūsā 钉柱 / Jacquard 卡片 / Hollerith 卡片)用相同视觉语汇(规则排列的小符号)但不同 substrate 表达,下方红色虚线连接每个节点标注 “Same symbol-as-physical-imprint, different substrate”

💥 #8 — 重建 h.6 Hurrian hymn 的”实体装置”必须同时解决 cuneiform 解码 + 9 弦琴调音 —— instrument design 的反问题

方法论惊讶 8 · 具体 9 · 可行 8

1970 年代以来,Anne Kilmer、Richard Crocker、Martin West 等学者尝试重建 h.6 的实际音乐 —— 至少有 5 种相互竞争的重构版本(Duchesne-Guillemin 公开演奏版最知名)。每个版本必须同时做出两个决定:(1) cuneiform 楔形符号到底对应哪些具体音高(存在多义性,例如 “idu” 既可指一种音程也可指一种调式);(2) 9 弦琴的具体调音(West 推断为 diatonic 七声音阶,但具体音高有 ±50 cent 的不确定性)。实体装置约束强迫我们把这两个不确定性同时解决:物理装置一旦造成,就锁定了两个决定 —— 琴的调音决定哪些音高可用,cuneiform 翻译规则决定如何分配音高给符号。这是 instrument design 的”反问题”:传统乐器先有乐谱再调音;这里必须先造装置再确认乐谱能演奏。结果是:物理装置的选择反向验证了 cuneiform 翻译规则 —— 哪些规则能让装置演奏出合理的旋律?这是一个全新的”考古乐理学方法论”。

如果要做写一篇 “Reverse engineering h.6: when the physical instrument constrains the cuneiform decipherment”——做一个 prototype:用 3D 打印造一个 9 弦现代版 hurrian sammûm(lyre),让它能演奏 West 1994 提出的所有 5 种音高分配方案;在每个方案下,让 musicologist 给旋律打分(流畅度、调式稳定性);统计哪个音高分配方案在物理装置上”听感最好”。这是把 instrument design 变成 cuneiform 翻译规则的判别准则。

参考文献 7
  1. West 1994 Music and Letters 75
  2. Kilmer 1965
  3. Duchesne-Guillemin reconstruction
  4. Crocker 1978 “Hebraic-Sumerian parallels”
  5. Hydraulis reconstruction Aquincum Museum 1931
  6. “Reverse engineering ancient instruments” methodology
  7. inverse problem in instrument design (Berge 2018)
生图提示词

双栏对照——左栏是 West 1994 提出的 5 种 h.6 音高分配方案(5 行楔形符号 → 五线谱的 5 种映射),右栏是 3D 打印的现代版 9 弦 hurrian sammûm 实物照片,下方一个评分表(音乐流畅度 + 调式一致性 + 物理可演奏性),最高分方案被红框标出。底部标注 “Physical instrument constrains textual decipherment: which cuneiform reading makes music?”