核心概念
Ato 通过“还能做什么”来描述一个 Computation(计算),并把该计算的一个已封存点,与重新在物理上产生该点的方式区分开。下面的术语是其余开发者指南所使用的词汇。
请保持这些区分:延续不是 Capsule(封装体),Capsule 不是 Run(运行),Record(记录)不是它所描述的计算,Materialization(物化)也不是任何事物的身份。
Computation
Computation 是从当前时刻起仍然保留的工作。它不是此前发生的一切的记录:已完成的步骤已经消失,重要的是从这里起还能发生什么。
一次交互会把一个 Computation 演化为下一个:
C ──α──▶ C'
交互包括进程写入标准输出、用户输入命令,或网络请求到达。组合会把较小的 Computation 通过 Port(端口)连接成更大的 Computation。
Contract
Contract(契约)是 Computation 上的一个可观察条件:“构建成功”、“编译器错误被复现”、“服务器对 GET /health 返回 200”。
C ⊨ K
Contract 说明一个未来的 Computation 必须满足什么,才算作同一类点。它是一个谓词,而不是一件产物。Record 可以显示某次观察时 Contract 成立,但 Record 不会因此成为 Contract。
Capsule
Capsule 是计算中一个被封存、不可变、可寻址的点——一个持久打开着的延续,可以被保存、传递、恢复、组合和分叉。
计算根 wire v2 使用 ComputationRef,Portable Application wire v3/v4 使用 ContractRef;两者不能互换。详见 Portable Capsules(英文)。
Run
Run 是从 Capsule 恢复的实时求值。封存是不可变的;随着交互发生,Run 会向前推进。
Capsule immutable
Run evolving
Record evidence
从同一个 Capsule 恢复的两个 Run 会各自发展,而不改变它们开始时的那个点。
Record
Record 是观察到一次交互的持久证据。Record 是保存 Run 历史的方式,也是重放如何在另一台机器上重建一个点的方式。
Record 说明 Run 如何到达某个点。它不是那个点本身,也不会重新定义 Capsule。
Materialization
Materialization 是在特定主机上实现某个逻辑 Capsule 的物理方式。Capsule 回答“我应该从哪里继续?”;Materialization 回答“我要如何在这台机器上回到那里?”。
logical continuation != physical realization
新增、替换或移除一个兼容的 Materialization,都不会创建新的 Capsule。
目前状态:
- Computation 根 wire v2 可通过可用的 Adapter 使用 Replay(
ato.replay@1)重建节点。Portable Application v3/v4 使用所选的 Derivation。 - 工作区快照(
ato.snapshot@1)可以被捕获和验证,但目前还无法单独恢复一个点。 - VM 快照 materializer 提供恢复接口,但需要合适的 backend 和兼容主机;不保证在任意主机间恢复。
Binding
Binding(绑定)把一项逻辑需求映射到具体的运行时资源。需要终端的 Port 会绑定到实际的 PTY;工作区 Port 会绑定到磁盘上的实际目录。
Binding 在每次运行中解析。它们不进入 Capsule 的身份。
Port 与 Protocol
Port 是 Computation 上用于交互的有类型边界。它的 Protocol 和角色决定哪些交互是有效的。组合会把 Port 连接在一起;运行时通过 Binding 把 Port 连接到物理端点。
模型的边界
跨主机运行仅适用于受支持的路径和环境,并非普遍保证。详见 Portable Capsules(英文)。