Capsule
Capsule(封装体)是计算中一个被封存、不可变、可寻址的点。它是一个持久打开着的延续:工作仍然保留,但这个点本身可以被命名、保存、分享、恢复、组合和分叉,而与产生它的进程无关。
seal(C42) → Capsule C42
resume(C42) → Run
fork(C42) → RunA, RunB
“打开”表示这个延续还没有结束。“持久”表示这个点在最初的运行结束后仍然存在。
身份与物化
Capsule 不是传输它的文件,也不是重建它的机制。
Capsule identity != bundle bytes
Capsule identity != materialization inventory
计算根 wire v2 使用 ComputationRef,Portable Application wire v3/v4 使用 ContractRef;两者不能互换。详见 Portable Capsules(英文)。
主机可以对 Capsule 做什么,取决于该主机上有哪些可用的物化方式。这种可用性决定主机能否以及如何恢复这个点,而不决定 Capsule 是什么。
Run、Record 与分支
- Run(运行)是从 Capsule 恢复的活动求值。Run 会向前推进;封存当前点会生成另一个 Capsule。
- Record(记录)是观察到的一次交互的证据。Record 让重放可以在别处重建一个点;它们不是那个点本身。
- 分支名称和谱系有助于定位和关联各个点。它们不会改变这些点的身份。
Capsule 不是什么
Capsule != Snapshot
Capsule != VM
Capsule != Container
Capsule != Replay Log
Capsule != capsule.toml
快照、虚拟机或容器可以实现一个 Capsule。重放日志可以携带重建它所需的证据。capsule.toml 描述一个项目如何被记录。它们都不是延续本身。
.capsule 文件
以下说明和示例仅适用于 computation-root wire v2。
可移植的 .capsule 文件是一个传输包。它包含被封存计算的根引用、该根所需的经过验证的对象闭包,以及可选的物化描述符。
导出不会改变该点的身份:
ato encap demo@main --materialize ato.replay@1 -o demo.capsule
ato run demo.capsule
ato run 以临时方式使用该包;它恢复的 Capsule 是这个包所指向的点,而不是文件本身。
关于生成和使用这些文件的命令,请继续阅读 CLI 快速上手。