6.2 KiB
18.1. Backend Workshop 1 - IRBackend Input Contract
Status: Ready for Closure (v1 Draft Text)
Purpose
Fechar o IRBackend como contrato de entrada do backend executável, de forma suficientemente explícita para permitir lowering determinístico para IRVM.
Context
- A spec atual de
IRBackendcobre sobretudo a fronteira frontend e não fechaIRBackend -> IRVM. - O runtime exige contratos rígidos para chamadas host-backed (
SYSC/HOSTCALL) e VM-owned (INTRINSIC). - O backend precisa receber um IR que preserve semântica e também fatos de artefato necessários para bytecode.
Decisions to Produce
- Shape mínima obrigatória de
IRBackendpara backend executável:- identidade de módulo/arquivo/callable,
- assinatura (parâmetros/retorno),
- corpo executável em forma backend-lowerable,
- âncoras de source attribution.
- Modelo de representação para operações VM-owned vs host-backed no
IRBackend. - Contrato de metadados reservados obrigatório:
- host bindings canônicos
(module, name, version), - metadados de intrinsics/builtin VM-owned,
requiredCapabilitiesdeterminístico.
- host bindings canônicos
- Regras de ordenação/deduplicação obrigatórias ainda no
IRBackend. - Política de rejeição determinística para formas que não entram no backend executável.
Core Questions
- O
IRBackenddeve carregar código em forma estruturada (blocos/expressões) ou linearizada? - Quais informações de tipos precisam sobreviver para o backend sem “re-tipagem” implícita?
- Como representar chamadas host-backed no
IRBackend:- por identidade canônica,
- por índice lógico,
- ou por ambos?
- Como representar intrinsics VM-owned:
- identidade canônica apenas,
- id final já conhecido,
- ou modelo híbrido?
- Quais invariantes de estabilidade de ordenação são obrigatórias para conformance?
- Quais campos mínimos de span/source mapping são mandatórios para erros backend-atribuíveis?
Resolution (v1)
Nao ha open questions bloqueantes para fechar o contrato de entrada IRBackend v1.
As perguntas desta agenda ficam consideradas resolvidas para v1 pelos termos normativos abaixo.
Normative Text (Draft for Closure)
1) Escopo e fronteira
IRBackende o contrato de entrada normativo do backend executavel.- O frontend MUST emitir
IRBackendcompleto para toda unidade admitida no Gate U. - O backend MUST tratar
IRBackendcomo fonte de verdade paraIRBackend -> IRVM. - Esta agenda NAO define o formato de
IRVMnem o encoding final de bytecode.
2) Obrigacoes minimas por callable
Para cada callable executavel emitido no IRBackend, o frontend MUST preservar:
- identidade estavel do callable no build atual;
- assinatura observavel:
- aridade de entrada;
- shape de retorno observavel;
- categoria de callable (ex.: funcao comum vs superficie reservada nao executavel);
- ancora de atribuicao de fonte (
fileId,start,end); - corpo backend-lowerable com semantica suficiente para emissao de chamadas e fluxo.
IRFunction apenas com nome/contagem de parametros/span NAO satisfaz este contrato executavel.
3) Classificacao obrigatoria de callsites
Todo callsite executavel no IRBackend MUST estar classificado em exatamente uma categoria:
CALL_FUNC(chamada de callable de programa);CALL_HOST(fronteira host-backed);CALL_INTRINSIC(operacao VM-owned).
Implementacoes MUST NOT inferir a categoria por heuristica textual na fase LowerToIRVM.
4) Contrato para host-backed
Todo CALL_HOST MUST carregar identidade canonica:
abiModule,abiMethod,abiVersion.
Todo CALL_HOST MUST carregar declaracao de ABI:
arg_slots,ret_slots.
O conjunto de bindings host-backed no IRBackend MUST ser deduplicado por (module, name, version) e ordenado por primeira ocorrencia deterministica.
5) Contrato para VM-owned intrinsics e builtins
Todo CALL_INTRINSIC MUST carregar identidade canonica VM-owned:
canonicalName,canonicalVersion.
Builtin projections, builtin constants e intrinsic callsites VM-owned MUST NOT ser modelados como host binding.
6) Metadados reservados obrigatorios
IRReservedMetadata MUST preservar, no minimo:
- host bindings canonicos admitidos;
- builtin type surfaces relevantes para lowering;
- builtin const surfaces relevantes para lowering;
requiredCapabilitiesdeterministico para assistencia de pipeline/packer.
requiredCapabilities MUST ser deterministico para o mesmo grafo de entrada admitido.
7) Diagnosticos e rejeicao deterministica
Quando um modulo/callable nao satisfaz o contrato de entrada executavel:
- a rejeicao MUST ser deterministica;
- o diagnostico MUST manter atribuicao de fonte acionavel;
- o frontend/backend MUST NOT degradar silenciosamente para comportamento executavel diferente.
8) Deferrals explicitos
Ficam deferidos para agendas seguintes:
- shape estrutural completo de
IRVMe algoritmo de lowering (Agenda 18.2); - layout/encoding final de
BytecodeModulee marshaling PBX (Agenda 18.3); - estrategia de otimizacao de backend.
Expected Spec Material
- Atualização de
docs/pbs/specs/13. Lowering IRBackend Specification.mdcom adendo backend-facing. - Decision record específico para “IRBackend executável v1”.
- Fixture set de conformance Gate U focado no contrato de entrada do backend.
Non-Goals
- Definir ainda o bytecode final.
- Definir políticas de otimização.
- Definir o formato final de debug/source map rico.
- Introduzir dependência de packer.
Inputs
prometeu-compiler/prometeu-frontend-api/src/main/java/p/studio/compiler/models/IRBackend.javaprometeu-compiler/prometeu-frontend-api/src/main/java/p/studio/compiler/models/IRBackendFile.javaprometeu-compiler/prometeu-frontend-api/src/main/java/p/studio/compiler/models/IRFunction.javaprometeu-compiler/prometeu-frontend-api/src/main/java/p/studio/compiler/models/IRReservedMetadata.javadocs/pbs/specs/13. Lowering IRBackend Specification.mddocs/pbs/specs/6.1. Intrinsics and Builtin Types Specification.mddocs/pbs/specs/6.2. Host ABI Binding and Loader Resolution Specification.md../runtime/docs/runtime/decisions/005-v1-vm-owned-input-intrinsics-and-language-agnostic-surface.md