ato

Docs/Grundkonzepte

Aktualisiert 2026-10-23

Grundkonzepte

Ato beschreibt eine Computation durch das, was sie noch tun kann, und hält einen versiegelten Punkt dieser Computation getrennt von der Art und Weise, wie dieser Punkt physisch erneut erzeugt wird. Die folgenden Begriffe bilden das Vokabular, das die übrigen Entwicklerleitfäden verwenden.

Behalten Sie die Unterscheidungen bei: Eine Fortsetzung ist keine Capsule, eine Capsule ist kein Run, ein Record ist nicht die Computation, die er beschreibt, und eine Materialization ist nicht die Identität von irgendetwas.

Computation

Eine Computation ist die Arbeit, die von einem aktuellen Punkt aus noch übrig ist. Sie ist kein Transkript von allem, was vor diesem Punkt geschehen ist: Abgeschlossene Schritte sind weg, und wichtig ist, was von hier aus noch geschehen kann.

Eine Interaktion entwickelt eine Computation in die nächste:

C ──α──▶ C'

Interaktionen umfassen einen Prozess, der auf seine Standardausgabe schreibt, einen Benutzer, der einen Befehl eingibt, oder eine eintreffende Netzwerkanfrage. Komposition baut eine größere Computation aus kleineren, die über Ports verbunden sind.

Contract

Ein Contract — auf Deutsch ein Vertrag — ist eine beobachtbare Bedingung an eine Computation: „der Build war erfolgreich“, „der Compilerfehler ist reproduziert“, „der Server antwortet auf GET /health mit 200“.

C ⊨ K

Ein Contract sagt, was gelten muss, damit eine zukünftige Computation als derselbe Art von Punkt zählt. Er ist ein Prädikat, kein Artefakt. Ein Record kann zeigen, dass ein Contract bei einer Beobachtung galt, aber der Record wird nicht zum Contract.

Capsule

Eine Capsule ist ein versiegelter, unveränderlicher, adressierbarer Punkt in einer Computation – eine dauerhafte, offene Fortsetzung, die aufbewahrt, weitergegeben, fortgesetzt, komponiert und gegabelt werden kann.

Wire v2 mit Computation-Wurzel verwendet ComputationRef, Portable Application wire v3/v4 dagegen ContractRef. Die Referenzen sind nicht austauschbar. Siehe Portable Capsules (Englisch).

Run

Ein Run ist eine lebende Auswertung, die von einer Capsule aus fortgesetzt wird. Versiegeln ist unveränderlich; ein Run schreitet voran, während Interaktionen geschehen.

Capsule   immutable
Run       evolving
Record    evidence

Zwei Runs, die von derselben Capsule aus fortgesetzt werden, entwickeln sich getrennt, ohne den Punkt zu verändern, von dem sie gestartet sind.

Record

Ein Record ist ein dauerhafter Beleg dafür, dass eine Interaktion beobachtet wurde. Records bewahren die Historie eines Runs und ermöglichen es Replay (der Wiedergabe aufgezeichneter Interaktionen), einen Punkt auf einer anderen Maschine zu rekonstruieren.

Ein Record erklärt, wie ein Run einen Punkt erreicht hat. Er ist nicht der Punkt selbst und definiert die Capsule nicht neu.

Materialization

Eine Materialization ist eine physische Art, eine logische Capsule auf einem bestimmten Host zu realisieren. Die Capsule beantwortet „Wo sollte ich fortsetzen?“; die Materialization beantwortet „Wie komme ich auf dieser Maschine dorthin zurück?“.

logical continuation  !=  physical realization

Das Hinzufügen, Ersetzen oder Entfernen einer kompatiblen Materialization erzeugt keine neue Capsule.

Aktueller Stand:

  • Computation-root wire v2 kann Replay (ato.replay@1) über verfügbare Adapter zur Rekonstruktion nutzen. Portable Application v3/v4 verwendet stattdessen die gewählte Derivation.
  • Ein Workspace-Snapshot (ato.snapshot@1) kann erfasst und verifiziert werden, kann aber noch nicht allein einen Punkt wiederherstellen.
  • Ein VM-Snapshot-Materializer bietet eine Wiederherstellungsschnittstelle; dafür sind ein geeignetes Backend und ein kompatibler Host erforderlich. Eine beliebige hostübergreifende Wiederaufnahme ist nicht garantiert.

Binding

Ein Binding ordnet eine logische Anforderung einer konkreten Laufzeitressource zu. Ein Port, der ein Terminal benötigt, ist an ein tatsächliches PTY gebunden; ein Workspace-Port ist an ein tatsächliches Verzeichnis auf dem Datenträger gebunden.

Bindings werden pro Run aufgelöst. Sie gehen nicht in die Identität der Capsule ein.

Ports und Protocol

Ein Port ist eine typisierte Grenze für Interaktion auf einer Computation. Sein Protocol und seine Rolle entscheiden, welche Interaktionen gültig sind. Komposition verbindet Ports miteinander; eine Laufzeit verbindet einen Port über ein Binding mit einem physischen Endpunkt.

Wo das Modell endet

Hostübergreifende Ausführung ist nur für unterstützte Pfade und Umgebungen verfügbar und nicht allgemein garantiert. Siehe Portable Capsules (Englisch).