时空可组合性 (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+ 插件)