A Calculus of Inheritance

该论文提出了一种以记录、定义和继承为三大原语、将继承建模为集合并集从而消除多重继承线性化问题的继承演算,该演算在语义上具有第一阶和不动点可计算性,且比λ演算具有更强的表达能力。

Bo Yang

发布于 2026-03-11✓ Author reviewed
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇文章提出了一种全新的编程思维模型,叫做**“继承演算”(Inheritance Calculus)**。

为了让你轻松理解,我们可以把现有的编程世界想象成两个不同的国家,而这篇文章介绍了一种能同时统治这两个国家的“超级语言”。

1. 两个旧世界的困境

想象一下,现在的编程主要有两种流派:

  • 函数式王国(λ\lambda-演算): 这里的人像魔术师。他们擅长用“魔法咒语”(函数)把东西变来变去。
    • 优点: 逻辑极其严密,能处理极其复杂的计算。
    • 缺点: 一旦涉及到“状态”或“修改”,魔术师们就头疼了。而且,如果你想给一个已经做好的魔法道具加新功能,往往得重写整个咒语。
  • 配置/声明式王国(如 NixOS, JSON): 这里的人像装修设计师。他们不写咒语,而是画图纸(配置文件)。他们通过“合并图纸”来构建系统。
    • 优点: 非常适合管理复杂的系统(比如整个操作系统的配置),改一个地方,整个系统自动更新。
    • 缺点: 以前大家觉得这种“只画图不写咒语”的方法太简单,算不了复杂的数学题,甚至被认为不够“聪明”(图灵不完备)。

核心问题: 以前,这两个王国是割裂的。你想做复杂的计算,就得用魔术师的方法;你想管理配置,就得用设计师的方法。没人能把它们完美地统一起来。

2. 新世界的核心:乐高积木与“深合并”

这篇文章的作者 Bo Yang 提出:其实,我们不需要那么复杂的魔法。只要把“继承”这个概念用到极致,就能同时解决所有问题。

他引入了三个最基础的积木:

  1. 记录(Record): 就像一个个乐高小盒子,里面装着各种属性(比如“颜色”、“大小”)。
  2. 定义(Definition): 在盒子上贴个标签,写上内容。
  3. 继承(Inheritance): 把两个盒子融合在一起。

关键创新点:深合并(Deep Merge)

想象你有两个乐高盒子:

  • 盒子 A 里有一个红色的轮子。
  • 盒子 B 里有一个蓝色的轮子,还有一个引擎。

在传统的编程(比如 Java 或 C++)里,如果你把 B 继承给 A,通常会发生“覆盖”:B 的红色轮子会把 A 的红色轮子替换掉,或者系统会报错说“冲突了”。

但在继承演算里,发生的是**“深合并”**:

  • 系统不会覆盖,而是把 A 和 B 里的东西全部拼在一起
  • 如果两个盒子都有“轮子”,系统会认为它们是两个不同的轮子,或者智能地把它们合并成一个更复杂的结构。
  • 结果: 你得到了一个既有红色轮子、又有蓝色轮子、还有引擎的超级盒子。

这就像什么?
就像你在装修房子。

  • 旧方法:如果你想在客厅加个书架,但墙上已经有个画了,你必须把画撕下来(覆盖),或者装修队会罢工(报错)。
  • 新方法(继承演算):你直接把书架在墙上,画还在,书架也在,甚至如果书架和画重叠,它们会自动融合成一个“带画的书架”。

3. 这个新世界有多强?

作者证明了,用这种简单的“拼盒子”方法,竟然能做出以前只有“魔术师”才能做到的事:

  • 它比魔法更强大: 它可以模拟所有的数学计算(图灵完备)。甚至,有些在旧魔法世界里会死循环(算不出来)的程序,在这个新世界里能算出结果。
  • 它解决了“表达式问题”: 这是编程界的一个著名难题。简单说,就是“想给旧系统加新功能,却不得不修改旧代码”。
    • 比喻: 以前,如果你想给一辆汽车加个“自动驾驶”功能,你得把发动机拆了重写。
    • 现在: 你只需要把“自动驾驶模块”这个新盒子,到汽车上。原来的发动机、车轮、座椅都完好无损,新模块自动接管了相关部分。而且,你可以同时拼上“自动驾驶”和“自动洗车”两个模块,它们互不干扰,完美共存。
  • 它自动处理“多重继承”的混乱: 在旧世界里,如果一个类继承了两个都有“刹车”功能的父类,系统会晕掉(不知道听谁的)。在这个新世界里,系统会认为“刹车”有两个来源,它们会自动合并,就像把两个刹车片叠在一起,反而刹得更稳。

4. 生活中的奇妙现象

作者还发现了一些意想不到的“副作用”:

  • 逻辑编程的自动涌现: 当你用这种“拼盒子”的方式做算术时,它会自动变成一种“关系数据库”的逻辑。
    • 比喻: 你本来只想算 $1+2,但因为你的盒子是“集合”的,它会自动帮你算出,但因为你的盒子是“集合”的,它会自动帮你算出 1+21+32+22+3$ 等等所有可能的组合。这就像你问“谁是我的朋友”,它不仅能告诉你名字,还能告诉你所有朋友的朋友,自动形成一张关系网。
  • 函数颜色的盲视: 在旧编程里,区分“同步”(一步一步做)和“异步”(边做边等)非常麻烦,代码要改来改去。但在这种新语言里,业务逻辑只是“空盒子”,具体的“同步”或“异步”实现只是后来拼上去的盖子。
    • 比喻: 你设计了一个“咖啡机”的图纸(业务逻辑)。你可以先拼上一个“手摇”的盖子(同步),也可以拼上一个“电动”的盖子(异步)。图纸本身完全不用改,就能适应两种情况。

5. 总结:为什么这很重要?

这篇文章告诉我们,编程不一定非要写复杂的“函数”和“循环”

通过一种极简的、基于**“记录合并”**的思维方式,我们可以构建出:

  1. 更灵活的配置系统(像 NixOS 那样管理整个操作系统)。
  2. 更强大的计算模型(能算出以前算不出的东西)。
  3. 永远可扩展的代码(想加功能就加,永远不用改旧代码)。

一句话总结:
这就好比我们一直以为盖房子必须用砖头(函数)一块块砌,或者用图纸(配置)画出来。作者发现,其实只要用一种**“智能乐高”,把不同的模块直接融合**在一起,不仅能盖出摩天大楼(复杂计算),还能让房子随时随意扩建(解决扩展性问题),而且永远不用担心模块之间会打架。

这就是**“继承演算”**:用最简单的“拼合”规则,构建最复杂的软件世界。