3.1 KiB
3.1 KiB
18.3. Backend Workshop 3 - Bytecode Marshaling and Runtime Conformance
Status: Active (Draft)
Purpose
Fechar o contrato de emissão de bytecode/PBX a partir de IRVM, com conformidade explícita ao loader/verifier/runtime atual.
Context
- O runtime já define layout de módulo, parser de seções e invariantes de load-time.
SYSCé seção obrigatória (mesmo vazia),HOSTCALLé forma pré-load,SYSCALLfinal só após patching do loader.- O verifier rejeita
HOSTCALLnão patchado e valida estrutura de controle/stack sobre imagem final.
Decisions to Produce
- Contrato de marshaling de
IRVM -> BytecodeModule:const_pool,functions,code,debug_info(mínimo obrigatório),exports,syscalls.
- Política de encoding de instruções:
- little-endian,
[opcode u16][immediate],- encoding de saltos/calls conforme ISA.
- Política de emissão de
SYSC:- deduplicação por identidade canônica,
- ordenação por primeira ocorrência,
arg_slots/ret_slotscoerentes com metadado host.
- Contrato explícito “pre-load artifact vs executable image”:
- backend emite
HOSTCALLquando host-backed, - backend não emite
SYSCALLbruto no artefato pré-load, - intrinsics VM-owned seguem caminho distinto.
- backend emite
- Estratégia de conformidade e regressão contra runtime real.
Core Questions
- Qual política oficial de ordenação de funções no bytecode (ordem de source, topo sort, entry-first)?
- Como calcular
code_offset/code_lenpor função em flatten final decode? - Quais hooks mínimos de source attribution serão emitidos no
debug_infov1? - Quais validações o emitter faz antes de serializar vs o que é delegado ao loader/verifier?
- Como padronizar mensagens/erros de marshaling para manter diagnóstico determinístico?
- Qual suíte mínima de integração prova “bytecode emitido roda no runtime” sem packer?
Expected Spec Material
- Atualização de
docs/general/specs/15. Bytecode and PBX Mapping Specification.md. - Atualização de
docs/general/specs/19. Verification and Safety Checks Specification.md. - Decision record de “bytecode backend v1 marshaling contract”.
- Plano de testes Gate I para backend executável.
Non-Goals
- Definir fluxo de empacotamento final de cartucho.
- Alterar o contrato do loader/runtime.
- Definir formato final de symbolication completo.
- Cobrir perf tuning de emissor.
Inputs
prometeu-compiler/prometeu-build-pipeline/src/main/java/p/studio/compiler/workspaces/stages/EmitBytecodePipelineStage.java../runtime/crates/console/prometeu-bytecode/src/model.rs../runtime/crates/console/prometeu-bytecode/src/assembler.rs../runtime/crates/console/prometeu-bytecode/src/program_image.rs../runtime/crates/console/prometeu-vm/src/virtual_machine/loader.rs../runtime/crates/console/prometeu-vm/src/vm_init_error.rs../runtime/crates/console/prometeu-vm/src/verifier.rsdocs/pbs/specs/6.2. Host ABI Binding and Loader Resolution Specification.mddocs/general/specs/15. Bytecode and PBX Mapping Specification.md