Skip to content

时空可组合性 (Spatiotemporal Composability)

一组描述"软件组件能否在运行时被安全地动态组装/拆卸"的形式化性质。由 DeepSeek-AI 与北大合作的论文《A Programming Paradigm for Spatiotemporal Composability》提出,并给出配套范式与实现(Cordis)。

两个正交维度

维度 问题 含义
时间可组合性 (temporal) "装/卸是否留痕" 卸载组件时,它做的副作用必须被完整、安全地逆转。需要追踪组件做的每次资源分配、事件注册、状态变更,并在移除时有序回收
空间可组合性 (spatial) "依赖是否健康" 组件能声明、发现、解析相互依赖,并在依赖出现/消失/改变身份时响应式地调整生命周期

静态场景下两者分别退化为词法作用域(RAII)和模块导入解析;动态场景(运行时组件来来去去)两者都变难得多。

达成机制

  • 可逆效应(revertible effects)→ 时间可组合性:每个上下文变换携带运行时追踪的单边逆,装载=应用效应序列,卸载=应用累加器(LIFO)恢复。组件两两"独立"时,任意交错顺序的撤销都成立(卸载不留痕)。
  • 反应式 coeffect(reactive coeffects)→ 空间可组合性:组件声明依赖规格,每次上下文变化按规格分类为激活/停用/中性,依赖就绪即激活、被撤回即停用。provider 的撤回由 withdrawal guard 保证滞后于 consumer 的 teardown。

关键保证(元理论)

  • Confluence(合流,最重要):无论调度的先后顺序,对同一组输入,动态系统停在的静止态 = "一开始就把最终组合写死"的静态装配态。动态过程与静态快照等价 → 开发者可以把动态组合应用当静态组合来推理。
  • Preservation(结构健全)、Temporal composability(卸载无痕)、Spatial composability(依赖拓扑健康)、Progress(无死锁且终止)。

直觉理解

  • 把"装载 → 卸载"变成代数上封闭、可独立撤销、嵌套可组合的操作。
  • 分工:可交换部分用效应承载(任意顺序执行/撤销);顺序敏感部分用 coeffect 承载(从效应外部强加顺序)。
  • 类似"操作系统在进程粒度的可组合性 / 容器编排在服务粒度的可组合性",但细到组件粒度,且由形式语义保证而非开发者纪律。

相关阅读

  • summaries/spatiotemporal-composability-paper.md — 完整论文精读
  • 本论文的实现系统 Cordis(TypeScript 元框架)+ 案例 Koishi(聊天机器人框架,4000+ 插件)