Skip to content

🌀 纠缠原理

在严格的因果拓扑中,空间上的循环依赖是绝对的禁忌。然而,真实的业务场景(如多维单位换算、UI 物理排版、复杂表单联动)往往充满了互相拉扯的双向制约。

MeshFlow 引擎本身并不能像魔法一样直接“消灭”死循环,而是倡导用一套全新的心智模型去化解它:张开“逻辑力场 (Logic Force Field)”。

如果说 SetRule 建立的是从高到低的单向引力导轨,那么 useEntangle 的本质就是将互相牵制的节点丢进一个力场,让它们在时间轴上震荡,并最终停留在势能最低的全局平衡点。

1. 降维打击:空间循环与时间线性 (Temporal Prophecy)

解决痛点:如何在物理上避免死循环,并在逻辑上维持双向绑定?

实现逻辑: 纠缠,在拓扑空间上看似是一个首尾相连的死循环,但在系统的时间轴上,它其实是一条不断向前延伸的线性演化轨迹。

  • 对未来发出预言:在力场中,节点 A 发生变化时,它不能直接越权去“篡改”节点 B(严禁直接调用赋值)。相反,A 只能通过提案向引擎发射一个关于 “B 在未来应该处于什么状态” 的预言。
  • 预言重塑现在:B 也同样会对 A 发出预言。引擎会收集整个网格内所有纵横交错的预言,并根据开发者的配置进行总结与合并,自然而然地让“现在的拓扑网格”蜕变为“预言中的未来”。

2. 告别 LWW:无冲突演化与增量操作 (CRDT Philosophy)

解决痛点:当 A 预言 B 变成 10,B 预言 A 变成 15 时,必然发生冲突。如果只是简单覆盖,如何保证数据不丢失?

在传统的双向绑定中,通常遵循粗暴的“最后写入者胜 (Last-Write-Wins, LWW)”,但这会直接导致中间态被抹杀。

实现逻辑: 为了达成完美的全局平衡,对于预言的提交大有讲究。MeshFlow 在纠缠中融入了 CRDT(无冲突复制数据结构) 的思想:

  • 操作符与增量 ($\Delta$):预言不必是绝对值。节点可以发射基于相对增量、集合求交、或是自定义操作符的预言。
  • 代数融合:当预言发生交汇时,引擎不是让它们互相覆盖,而是进行逻辑和数学上的矢量叠加。A 和 B 的互相作用不再是互相伤害的零和博弈,而是各种作用力在网格中的和谐融合。

3. 势能坍缩:局部震荡达成全局平衡 (Global Equilibrium)

解决痛点:如何解开类似“数独”或“排版碰撞”这种牵一发而动全身的网状约束?

实现逻辑:useEntangle 赋予了节点在逻辑时间轴上进行“状态拔河”的权利。

  • 每一次预言的发射与吸收,都会在力场中引发一次局部的状态震荡。
  • 这些局部的波纹会向周围的关联节点扩散,引发链式反应。系统会自动推演这场震荡,合力牵引着所有的节点不断试探,直至所有拉扯力相互抵消,力场最终会稳稳地停留在势能最低的“平衡态”。此时,全局坍缩完成。

4. 阻尼衰减与熔断保护 (Damping & Circuit Breaker)

解决痛点:既然允许互相预言,系统如何确保震荡一定会停止,避免陷入永动机般的无限死循环?

实现逻辑: 没有能量损耗的系统是不存在的,MeshFlow 用两条铁律守护主线程的安全:

  • 物理阻尼 (Damping):开发者在编写纠缠的 emit 预言时,可以引入阻尼(如衰减系数、位置换算损耗、或极小值抹零)。只要力场中存在能量损耗,不管循环纠缠多么复杂,系统的总拓扑动能必然会在震荡中流失,并最终归零停止。
  • 绝对熔断 (Circuit Breaker):作为兜底方案,引擎在底层设置了严格的“最大推演步数”。一旦检测到无阻尼的恶意死循环(震荡久久无法触底),引擎会在达到熔断阈值时强制停机,切断演化链,彻底杜绝内存溢出。

💡 核心对比

维度SetRuleuseEntangle
拓扑形态空间上的单向有向无环图 (DAG)空间成环、时间线性的震荡演化网
核心动作基于当前输入,直接计算下游输出向目标发射未来预言 (Proposal)
冲突处理绝对层级覆盖(下游无条件服从上游水流)预言融合、增量叠加 (CRDT 思想)
底层隐喻精密咬合的单向齿轮传动弹簧互相拉扯直至势能耗尽的力场
最佳实践确定性的数据流派发、异步竞态控制消除 UI 碰撞、多维单位双向对齐、约束求解

TIP

永远不要在 useEntangle 的闭包内直接覆写状态。请把期望的变化作为预言 return 出来,给系统赋予合适的阻尼,然后信任引擎——它会让局部的混乱在震荡中自发趋向完美的全局平衡。