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 快速上手。