70 lines
2.8 KiB
Markdown
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`
|
|
|