📄 一句话概括
动态组合的第二条维度是空间的:环境变了(依赖没了、键被改了),插件的处境必须是明确的失效,而不是 undefined 地继续跑。
📝 本节和前面几节的关系
5.1、5.2 管的是时间与声明,这一节管处境:插件活在环境里,环境不是静止的。
一、环境会变,这是常态
会话进行中,环境随时在变:
- 依赖的另一个插件被卸了(5.8 实验的【消失】)。
- 共享的配置键被改了。
- 所在的分组被整体替换。
问题不是【会不会变】,是变了之后插件的处境清不清楚。
二、实测:isolate 画出的空间格子
配置里 10 处 cordis:group,部分带 isolate 声明:
- 压缩分组:
isolate: compaction / toolResultPruner。 - 委托分组:
isolate: workflowEngine。
isolate 的意思:这一组的键只在组内可见——组里换实现影响不到组外,组外的变化也进不来。
每个插件活在自己声明过的格子里——格子内的变化它看得见,格子外的变化与它无关。
三、两种失效,一种合格
环境变了,插件的处境有三种可能:
- 明确的失效:依赖没了,插件停摆,账本记一笔——合格。
- 沉默的降级:功能残了但还在跑,没人知道——最危险。
- undefined 的继续跑:行为不可预测——灾难。
空间维度要的就是第一种:失效可以,但必须明明白白——能被发现、能被记录、能被恢复。
四、和虚拟化的对照
云平台早就做过同一道题:虚拟机迁移或宿主机变化时,虚机的处境必须明确——要么活着(迁移成功),要么挂了(有记录),不能【半死不活】。
isolate 之于插件,就是隔离之于虚机:把变化限制在格子里,让每个单元的生死都清楚可查。
五、动手 Demo:空间维度——环境变了还能不能跑
isolate 格子与三种处境:
groups = [
("compaction", "isolate: compaction / toolResultPruner"),
("delegation", "isolate: workflowEngine"),
]
for a, b in groups:
print(" %-12s %s" % (a, b))
print()
for s in ("明确的失效", "沉默的降级", "undefined 的继续跑"):
print(" 处境: %s" % s)
print(" -> 只要第一种")
实跑输出:
--------------------------------------------------------------------
空间维度——环境变了还能不能跑
--------------------------------------------------------------------
空间维度一句话:**当能力环境变化时,插件还能不能运行**。
实测:配置里有 10 处 `cordis:group`,部分带 `isolate` 声明:
分组 isolate 声明 隔离了什么
--------------------------------------------------------------------------
compaction(压缩) compaction / toolResultPruner 压缩相关的能力键
delegation(委托) workflowEngine 工作流引擎
--------------------------------------------------------------------------
isolate 的意思:**这一组的东西只在组内可见**——
组里换实现、组里开关,影响不到组外;组外的变化也进不来。
这就是空间边界:每个插件都活在自己声明过的环境里,
环境变了(依赖没了、键被改了),它的处境是【明确的失效】,
而不是【 undefined 的继续跑】。
沉默的降级最危险——比崩溃难发现得多;空间边界就是防它的。 isolate 的格子让【组内变化、组外无感】成为默认行为,变化半径被物理限制。 和云平台虚拟化的对照说明:这不是新问题,是老问题的新住址。
30 秒实验
- 在配置树里找一处
isolate,说出它隔离了哪个键。 - 举一个【沉默的降级】例子:什么软件坏了一半却没人发现?
- 说说分组与 3.2.2 作用域的关系(提示:格子也是边界)。
常见误区
- 错误:环境变化是异常情况,可以不管。——纠正:动态组合下变化是常态,处境必须始终明确。
- 错误:isolate 只是性能隔离。——纠正:它是可见性隔离——组内的键不外泄,组外的变化不渗入。
- 错误:插件挂了但还在跑,说明它健壮。——纠正:那叫沉默的降级,是最危险的处境。
自测三问(点开对答案)
1. 空间维度的问题是什么? —— **当能力环境变化时,插件还能不能运行**——处境必须明确。 2. isolate 声明隔离了什么? —— **组内的键只在组内可见**——组内换实现不影响组外,组外变化进不来。 3. 三种处境里只要哪一种? —— **明确的失效**——沉默的降级与 undefined 的继续跑都不可接受。- ☐ 下一节(5.4 插件被发现,不等于已经具备运行条件)
相关笔记
- Effect 的边界 —— 声明是格子的图纸
- 简单的虚拟化基础设施 —— 隔离格子的前辈
- 作用域的意义:动态组合必须有边界 —— 空间格子的上一版
- 🐳 DeepSeek Harness · 索引