让我们先从一个简单的事实开始——
我们都知道,最好的程序员能够做出最简洁、最小的抽象系统,让我们将其称之为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