核心概念
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(英文)。