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

1 月 12 日
 Nivdc

让我们先从一个简单的事实开始——
我们都知道,最好的程序员能够做出最简洁、最小的抽象系统,让我们将其称之为P
然后,差一些的程序员(比如我)会写一些附带功能来扩展这个系统,让我们将我的代码称之为Code,
我们可以将这个过程表述为:
App = P + Code

这个过程是很自然的,不是么?
OK ,既然我们都接受这个自然的过程,那么设想实际上存在一个逆过程不是也很自然吗?

假设这里有一个庞大、丑陋的巨型系统W,难道不该存在一种逆过程,将这个系统改进成一种更简洁的形态L吗?
就像这样:

W + inverse Δ = L

或是:

APP - Code = P

你可能没见过这个东西,但是在数学上,它是成立的。


现在,让我换一个视角继续解释这个理论。

假设你的公司开发了某个实用的大型系统,然后突然来了个客户看上了你的大型系统。
但是,你的公司的需求和客户公司的需求又不可能完全一致。

传统的做法是什么样的呢?
你可能将两个系统的共性剥离出来组成一个小型的核心系统,然后维护两套派生系统。

但是在可逆理论指导下,则完全没必要这么做,
你完全可以全心全意维护你公司主用的系统,然后编写 delta 代码来掩盖二者不兼容的部分。

假设:
X 是你的系统
Y 是顾客要求的系统
Δ 是两个系统之间不兼容的部分

注意Δ包含:

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

我们可以将其写为:
Y = X + Δ

关键点在于:

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

让我们再用官方文档中的一个例子来比较一下这个范式的特点:

Object-Oriented:        The inequality  A > B  
Component:              Addition        A = B + C  
Reversible Computation: The delta       Y = X + ΔY  

我觉得你可以注意到,可逆计算是组合范式的一个扩展,它引入了一个非常有趣的删减原语。

传统组件复用是“相同才能复用”,它把口号翻转成“相关就能复用”;
只要两个系统能写成 XX+Δ,就能零修改地共用 X

等于把“封装必须稳定”变成了“演化可以破坏封装”,彻底掀掉面向对象给系统级复用盖的天花板。

说来也巧,我觉得我们实际上早就遇到过这个理念一次,在 JavaScript 的原型链继承特性上。
只不过可逆计算理论把它往外推,延伸到了整个项目工程的范围。

目前我还看不出这个理论能够带来什么实践上的颠覆,但是它提供的思想是很具备启发性的。

想想看这个点子——你编写代码来删减功能,多有趣啊。


这个理论的作者目前正在制作一个基于该理论(及其延伸理论)的低代码平台——Nop Platform
这个项目的官方口号是:
App = Delta x-extends Generator<DSL>

不过这些个延伸理论有点太复杂了,我也不是很懂,如果你想了解的话你可以读一下它的文档。


官方介绍:
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

2095 次点击
所在节点    分享发现
35 条回复
Nivdc
1 月 12 日
里面有一段是 KIMI 写的,把这理论都吹上天了😅
sillydaddy
1 月 12 日
感谢分享!很新奇的概念,回头看看。
zizon
1 月 12 日
要不先读读初等数论.
Nivdc
1 月 12 日
@zizon 我当然知道这里面的等式不严谨,但是这又不妨碍它的表达,纠结这个干啥😅
爱看严谨的?那你看作者的天书文档去。
Nivdc
1 月 12 日
@zizon 我知道你可能对我采用的简单的加号+和减号-产生一种直觉上的误解,其实它和数学概念上的加减不是一回事,它代表着一种组合过程,理论的作者用了个更合理的合并符号'⊕',我在这里只是出于介绍的目的将其简化了。
newtype0092
1 月 12 日
"你可能没见过这个东西,但是在数学上,它是成立的。"

我一个数学学渣都知道,你要把软件迭代这种多次变换压缩成一个 Δ,最起码得在一个线性空间里吧。。。

Y1 = X + Δ1
Y2 = X + Δ1 + Δ2
你要 X = Y2 - (Δ1 + Δ2) 成立
那 X + Δ2 = Y2 - Δ1 也得成立吧?

软件工程完全不是这么回事儿好么,每次迭代的代码都得和之前一次的代码完全正交不相关,什么应用能这么开发呢?
Nivdc
1 月 12 日
@newtype0092 你的质疑是极好的,因为我自己也非常怀疑这个玩意,但是我的水平太差了,可能没办法准确理解你的核心疑问。

所以我让 AI 帮我解读了一下,它是这么回答的:

这里有一个非常微妙、但决定性的错位:

你的真实意思是:
Δ 是一种 “工程差异的描述方式”
它是依附于 X 的补丁/遮罩/视图

而他说的“数学成立”理解成了:
Δ 是一种 “可独立存在、可组合、可逆的变换元素”
这两者完全不是一回事。

你心里想的是:
Δ 只在 (X → Y) 这个关系中有意义

而他以为你说的是:
Δ 是某种普适的变换算子
Nivdc
1 月 12 日
@newtype0092 可能是我说的这句“在数学上,它是成立的”这个判断确实是有问题的,造成了误解,非常抱歉
ZGame
1 月 12 日
智商检测器,软件都是把复杂的东西搞简单,这个理论把简单的东西复杂化,抽象化
Nivdc
1 月 12 日
@ZGame 没有啊,我觉得很简单啊,就是在用组合范式的时候你可以减掉原有的功能,为系统级复用提供了解决方案。
要是解决问题的规模很小,这个范式不会起效的,甚至就是句废话,但是在大规模系统系统复用上,这个理论很有参考价值。
newtype0092
1 月 12 日
@Nivdc #8 没有我就单纯探讨一下。。。

我刚才还好奇专门读了他的文档,说真的有点神棍了。

他前面提出了一点数学上的内容,但实际上是偷换在偷换概念。
数学的运算都是有严格定义域的,他是典型的把线代、机器学习那套最基础的 y = f(x) + d 的东西硬往不相关的软件开发领域套,甚至还放了个完全不知想表达什么的图。
这部分你随便找个机器学习课程看前 1 个小时就能能懂,没啥高深的。

而且后面的部分和前面的数学部分基本没啥关系,看起来就卖弄一些概念,把数学苦手的人先吓住,然后就随便忽悠了。。。
Nivdc
1 月 12 日
@newtype0092 我觉得你说的完全正确,那个天书文档真的有点难懂,感觉就是纯在卖弄概念😅
但是“软件演化来自Δ差量递进”,我觉得这个理念确实有其先进和独到之处
newtype0092
1 月 12 日
@Nivdc #12 Δ差量这里我觉得他也在偷换

软件迭代是需要很多维度的输入的,设计编码测试等等,是需要实打实的工作量的,即使现在有 AI 了,微调、推理等工作量也是少不了的。

他想把这个东西往数学上去靠,把这个概念解释成一个可以按某种方式直接计算的东西(神奇 ⊕ 操作 )。
数学概念上这个Δ可运算是因为有定义的规则和成熟的求解工具,计算器按按好了。

软件上要想达到这个效果就需要有一个规则能让我直接得到正确代码,而不用上面的工作的过程。
仔细想想这不是就是我们 (Ctrl+)CV 工程师的绝学么。。。

那现在的问题就是只要找到一个万能代码库,未来所有功能直接从里面 copy 出来就行了,要修改什么功能直接增删对应的代码。
那现在这个代码库从哪来呢?网上先搜代码也肯定覆盖不了所有需求。
所以就可以把新功能限制在指定的框架范围内,把支持的功能全部整理成模版。。。

然后就有种越想越熟悉的感觉,你懂吧
ZGame
1 月 12 日
@Nivdc #10 看起来是一套框架, 你怎么证明他不是弄了一套 App=f(a,b,c,d,e,f,g....) ,让程序员去按照他的逻辑去填参数呢。 App=f(a)+g(b)+v(c) 这样是不是更简单点呢?
dhb233
1 月 12 日
什么?你把屎山解决了?
nutting
1 月 12 日
看起来像是共产主义宣言
Nivdc
1 月 12 日
@newtype0092 汗流浃背了😅

但是我觉得这里的关键不是万能代码库,而是你现在在开发的东西最终都会变成现实世界中某个领域的专属代码库,对吧?
如果现在出现了另一块与你的领域有重合但不完全相同的领域,需要你的代码。

那么Δ差量为我们展示了另一条路经,除了“抽出两块领域共有的东西”这个方法外,你还可以反向削减原有的代码库,使其符合当前的需求。


Nop Platform 那一套扩展确实非常可疑,我也没仔细看过。
XML+Java 实现的,这能靠谱吗(滑稽)


此外我还觉得即便这个范式能够得到推广,在实践中 Y=X+Δ 也很有可能存在一个临界点,取决于 Y 和 X 的差异程度,一旦Δ本身出现膨胀,这个范式需要退化到旧范式的路径上重组为 Y=C+ΔY ,X=C+ΔX 。
momocraft
1 月 12 日
2 年前在知乎看过了

在实用案例出现前被我归类为民科
Nivdc
1 月 12 日
@ZGame 我觉得你说的和 @newtype0092 的质疑是比较相似的,那就姑且先抛开 Nop Platform 这个框架看,你觉得这个理论是不是有些有道理的地方呢?
ZGame
1 月 12 日
@Nivdc #19 不认可。 你把他的说法换成微积分语言去理解看看,你觉得现实吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1184801

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX