핵심 개념
Ato는 Computation(계산)을 앞으로 무엇을 할 수 있는지로 설명하고, 그 Computation의 봉인된 지점을 그 지점을 물리적으로 다시 만드는 방식과 분리해 유지합니다. 아래 용어는 나머지 개발자 가이드에서 사용하는 어휘입니다.
구분을 유지하세요. continuation(이어지는 것)은 Capsule(캡슐)이 아니고, Capsule은 Run(실행)이 아니며, Record(기록)는 그것이 설명하는 Computation이 아니고, Materialization(실체화)은 어떤 것의 정체성도 아닙니다.
Computation
Computation은 현재 지점에서 남아 있는 작업입니다. 그 지점 이전에 일어난 모든 일의 기록이 아닙니다. 완료된 단계는 사라졌고, 중요한 것은 여기서 여전히 일어날 수 있는 것입니다.
상호 작용이 하나의 Computation을 다음 Computation으로 진화시킵니다:
C ──α──▶ C'
상호 작용에는 프로세스가 표준 출력에 쓰는 것, 사용자가 명령을 입력하는 것, 네트워크 요청이 도착하는 것이 포함됩니다. 조합은 Port(포트)로 연결된 더 작은 Computation들로 더 큰 Computation을 만듭니다.
Contract
Contract(계약)는 Computation에 대한 관측 가능한 조건입니다. "빌드가 성공했다", "컴파일러 오류가 재현되었다", "서버가 GET /health에 200으로 응답한다" 같은 것입니다.
C ⊨ K
Contract는 미래의 Computation이 같은 종류의 지점으로 인정되기 위해 무엇이 성립해야 하는지 말합니다. 그것은 술어이지 산출물이 아닙니다. Record는 한 관측에서 Contract가 성립했음을 보여 줄 수 있지만, Record가 Contract가 되지는 않습니다.
Capsule
Capsule은 Computation 안의 봉인되고 불변이며 주소 지정 가능한 지점입니다. 보존하고, 전달하고, 재개하고, 조합하고, 분기할 수 있는 지속적인 열린 continuation입니다.
Computation 루트 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의 이력을 보관하는 방식이며, Replay(리플레이)가 다른 머신에서 지점을 재구성하는 방식입니다.
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은 실행마다 해석됩니다. Binding은 Capsule의 정체성에 들어가지 않습니다.
Ports and Protocol
Port는 Computation에서 상호 작용을 위한 타입이 지정된 경계입니다. Protocol과 역할이 어떤 상호 작용이 유효한지 결정합니다. 조합은 Port를 서로 연결하고, 런타임은 Binding을 통해 Port를 물리적 엔드포인트에 연결합니다.
모델이 멈추는 곳
호스트 간 실행은 지원되는 경로와 환경에서만 가능하며 보편적으로 보장되지 않습니다. Portable Capsules (영어)를 참고하세요.