可逆计算理论:(可能是)下一代软件构造理论

让我们先从一个简单的事实开始—— 我们都知道,最好的程序员能够做出最简洁、最小的抽象系统,让我们将其称之为P, 然后,差一些的程序员(比如我)会写一些附带功能来扩展这个系统,让我们将我的代码称之为Code, 我们可以将这个过程表述为: App = P + Code 这个过程是很自然的,不是么? OK ,既然我们都接受这个自然的过程,那么设想实际上存在一个逆过程不是也很自然吗?
假设这里有一个庞大、丑陋的巨型系统W,难道不该存在一种逆过程,将这个系统改进成一种更简洁的形态L吗? 就像这样:
W + inverse Δ = L 或是:
APP - Code = P 你可能没见过这个东西,但是在数学上,它是成立的。

现在,让我换一个视角继续解释这个理论。 假设你的公司开发了某个实用的大型系统,然后突然来了个客户看上了你的大型系统。 但是,你的公司的需求和客户公司的需求又不可能完全一致。 传统的做法是什么样的呢? 你可能将两个系统的共性剥离出来组成一个小型的核心系统,然后维护两套派生系统。 但是在可逆理论指导下,则完全没必要这么做, 你完全可以全心全意维护你公司主用的系统,然后编写 delta 代码来掩盖二者不兼容的部分。
假设: X 是你的系统 Y 是顾客要求的系统 Δ 是两个系统之间不兼容的部分 注意Δ包含:

客户要求增加的功能, 客户要求减少的功能,这个要求可能不是显式要求,而是他不需要。

我们可以将其写为: Y = X + Δ 关键点在于:

X 从来没有被破坏、拆分 系统差异是“附着的”,而不是“撕裂的”

让我们再用官方文档中的一个例子来比较一下这个范式的特点: Object-Oriented: The inequality A > B
Component: Addition A = B + C
Reversible Computation: The delta Y = X + ΔY

我觉得你可以注意到,可逆计算是组合范式的一个扩展,它引入了一个非常有趣的删减原语。
传统组件复用是“相同才能复用”,它把口号翻转成“相关就能复用”; 只要两个系统能写成 X 与 X+Δ,就能零修改地共用 X。
等于把“封装必须稳定”变成了“演化可以破坏封装”,彻底掀掉面向对象给系统级复用盖的天花板。
说来也巧,我觉得我们实际上早就遇到过这个理念一次,在 JavaScript 的原型链继承特性上。 只不过可逆计算理论把它往外推,延伸到了整个项目工程的范围。
目前我还看不出这个理论能够带来什么实践上的颠覆,但是它提供的思想是很具备启发性的。
想想看这个点子——你编写代码来删减功能,多有趣啊。

这个理论的作者目前正在制作一个基于该理论(及其延伸理论)的低代码平台——Nop Platform 这个项目的官方口号是: App = Delta x-extends Generator 不过这些个延伸理论有点太复杂了,我也不是很懂,如果你想了解的话你可以读一下它的文档。

官方介绍: https://gitee.com/canonical-entropy/nop-entropy/blob/master/docs/theory/reversible-computation.md 项目仓库: Gitee: https://gitee.com/canonical-entropy/nop-entropy GitHub: https://github.com/entropy-cloud/nop-entropy