prometeu-studio/docs/pbs/agendas/18.2. Backend Workshop 2 - LowerToVM and IRVM Contract.md

70 lines
2.8 KiB
Markdown

# 18.2. Backend Workshop 2 - LowerToVM and IRVM Contract
Status: Active (Draft)
## Purpose
Definir o contrato intermediário `IRVM` e as regras normativas de lowering `IRBackend -> IRVM`, garantindo que a emissão de bytecode seja mecânica e determinística.
## Context
- O runtime já define ISA e calling rules concretas.
- No runtime atual, jumps usam imediato `u32` absoluto relativo ao início da função.
- O verificador e o loader já têm validações rígidas que devem ser antecipadas pelo backend sempre que possível.
## Decisions to Produce
1. Modelo oficial de `IRVM`:
- unidades (módulo/função/bloco),
- instruções VM-like,
- referência a constantes/globais/locals/callables,
- metadados mínimos por função.
2. Regras de lowering para controle de fluxo:
- labels simbólicos,
- normalização de blocos,
- política de branch/jump target.
3. Regras de lowering para chamadas:
- `CALL`,
- `HOSTCALL` pré-load,
- `INTRINSIC` VM-owned.
4. Regras de layout de função e slots:
- `param_slots`,
- `local_slots`,
- `return_slots`.
5. Política de diagnósticos determinísticos no lowering para rejeições backend-originadas.
## Core Questions
1. `IRVM` permite pseudo-opcodes que não existem na ISA final?
2. Onde ocorre a resolução final de labels para offsets: no próprio lowering ou apenas no emitter?
3. Como garantir que cada função tenha finalização válida (`RET`/terminador) sem depender só do verificador?
4. Qual o limite de checagens estáticas no compiler vs checagens delegadas ao verifier do runtime?
5. Como representar efeitos de stack no `IRVM` para detectar underflow/mismatch antes de emitir bytes?
6. Como versionar `IRVM` em relação à linha de ISA do runtime selecionada?
## Expected Spec Material
1. Nova spec: `IRBackend -> IRVM` lowering contract.
2. Nova spec: `IRVM` model e invariantes.
3. Tabela de mapeamento `IRVM op -> ISA op` por linha de runtime suportada.
4. Critérios de testes unitários do `LowerToVMPipelineStage`.
## Non-Goals
- Implementar ainda otimizações avançadas.
- Expandir ISA com novos opcodes.
- Resolver políticas de linking multi-artifact além do necessário para execução v1.
- Definir packer/cart assembly.
## Inputs
- `prometeu-compiler/prometeu-build-pipeline/src/main/java/p/studio/compiler/workspaces/stages/LowerToVMPipelineStage.java`
- `../runtime/docs/runtime/virtual-machine/ISA_CORE.md`
- `../runtime/docs/runtime/specs/02-vm-instruction-set.md`
- `../runtime/docs/runtime/specs/02a-vm-values-and-calling-convention.md`
- `../runtime/crates/console/prometeu-bytecode/src/opcode.rs`
- `../runtime/crates/console/prometeu-bytecode/src/opcode_spec.rs`
- `../runtime/crates/console/prometeu-bytecode/src/decoder.rs`
- `../runtime/crates/console/prometeu-vm/src/verifier.rs`