62 lines
2.6 KiB
Markdown
62 lines
2.6 KiB
Markdown
# 18.0. Backend VM Pipeline - Orchestration Agenda
|
|
|
|
Status: Active (Draft)
|
|
|
|
## Purpose
|
|
|
|
Definir a ordem de fechamento arquitetural para o backend executável:
|
|
|
|
1. contrato de entrada `IRBackend` vindo do frontend,
|
|
2. lowering `IRBackend -> IRVM`,
|
|
3. marshaling `IRVM -> bytecode/PBX` executável no runtime.
|
|
|
|
## Context
|
|
|
|
- O pipeline já prevê `LowerToVMPipelineStage` e `EmitBytecodePipelineStage`, mas ambos estão vazios.
|
|
- O runtime já impõe contratos concretos de loader/verifier/VM que precisam ser respeitados pelo backend.
|
|
- Nesta rodada, `packer` está explicitamente fora de escopo.
|
|
|
|
## Decisions to Produce
|
|
|
|
1. Ordem oficial de workshops e critérios de saída por etapa.
|
|
2. Fronteiras normativas entre:
|
|
- frontend (`IRBackend`),
|
|
- backend (`IRVM` + emissão),
|
|
- runtime (loader/verifier/execução).
|
|
3. Critérios de “backend integration-ready” para um artefato bytecode mínimo rodar no runtime.
|
|
4. Estratégia de fechamento em docs (`agendas -> decisions -> specs -> PR`).
|
|
|
|
## Core Questions
|
|
|
|
1. Quais decisões precisam ser fechadas antes de qualquer implementação de `LowerToVM`?
|
|
2. Quais invariantes são obrigatórias na fronteira `IRBackend` para evitar ambiguidade no backend?
|
|
3. Quais invariantes são obrigatórias na fronteira `IRVM` para emissão determinística?
|
|
4. Quais verificações devem ocorrer no compilador antes de delegar ao loader/verifier do runtime?
|
|
5. Como organizar testes de integração sem introduzir dependência de packer?
|
|
|
|
## Expected Spec Material
|
|
|
|
1. Nova spec de contrato `IRBackend -> IRVM` (backend-facing).
|
|
2. Nova spec de contrato de `IRVM` (shape, invariantes, diagnóstico).
|
|
3. Atualização de `docs/general/specs/15. Bytecode and PBX Mapping Specification.md`.
|
|
4. Atualização de `docs/general/specs/19. Verification and Safety Checks Specification.md`.
|
|
|
|
## Non-Goals
|
|
|
|
- Definir formato final de packer/cartucho.
|
|
- Redesenhar ISA do runtime.
|
|
- Redesenhar loader/verifier do runtime.
|
|
- Fechar otimizações de backend (peephole, SSA, etc.).
|
|
|
|
## Inputs
|
|
|
|
- `prometeu-compiler/prometeu-build-pipeline/src/main/java/p/studio/compiler/workspaces/stages/LowerToVMPipelineStage.java`
|
|
- `prometeu-compiler/prometeu-build-pipeline/src/main/java/p/studio/compiler/workspaces/stages/EmitBytecodePipelineStage.java`
|
|
- `docs/pbs/specs/13. Lowering IRBackend Specification.md`
|
|
- `docs/general/specs/15. Bytecode and PBX Mapping Specification.md`
|
|
- `docs/pbs/specs/6.2. Host ABI Binding and Loader Resolution Specification.md`
|
|
- `../runtime/docs/runtime/virtual-machine/ISA_CORE.md`
|
|
- `../runtime/crates/console/prometeu-vm/src/virtual_machine/loader.rs`
|
|
- `../runtime/crates/console/prometeu-vm/src/verifier.rs`
|
|
|