prometeu-studio/docs/compiler/pbs/pull-requests/PR-08.5-intrinsic-registry-single-source-sync-with-runtime.md
2026-03-24 13:42:37 +00:00

2.9 KiB

PR-08.5 - Intrinsic Registry Single Source of Truth (Compiler <-> Runtime)

Briefing

O compiler backend hoje possui IRVMIntrinsicRegistry hardcoded e o runtime possui registry propio em builtins.rs.

Mesmo estando alinhados agora, a manutencao manual em dois lugares cria risco alto de drift.

Motivation

Dor atual que esta PR resolve

  1. Duplicacao de source-of-truth para ids finais de intrinsic.
  2. Risco de regressao silenciosa quando runtime evoluir surface intrinsic.
  3. Custo operacional para garantir paridade manual em cada mudanca.

Target

Estabelecer uma fonte unica versionada para mapeamento canonico de intrinsics (canonicalName@version -> finalId) e consumir isso em compiler + runtime com teste de paridade automatizado.

Dependencies

Prerequisitos diretos:

  1. PR-08.1 (resolucao canonica consistente no frontend).
  2. PR-05.7 (caminho de verificacao runtime-backed robusto).

Scope

  1. Definir artefato de registry canonico (ex.: JSON/TOML) sob controle de versionamento.
  2. Gerar/consumir mapeamento no compiler (IRVMIntrinsicRegistry) a partir desse artefato.
  3. Adicionar checagem de paridade em teste para impedir divergencia com runtime.
  4. Documentar fluxo de evolucao de intrinsic id sem quebra de compatibilidade.

Non-Goals

  1. Nao reescrever todas as implementacoes de intrinsic do runtime nesta PR.
  2. Nao alterar semantica de execucao de INTRINSIC.
  3. Nao migrar para discovery dinamico em tempo de execucao.

Method

O que deve ser feito explicitamente

  1. Introduzir arquivo canonico de registry em local acordado (docs ou shared metadata).
  2. Criar utilitario de leitura/geracao para preencher IRVMIntrinsicRegistry no compiler.
  3. Adicionar teste no compiler que compara mapeamento esperado com runtime (snapshot/paridade).
  4. Adicionar regra de CI para falhar em desvio de paridade.
  5. Atualizar docs de contribuicao para fluxo de adicao/upgrade de intrinsics.

Acceptance Criteria

  1. Existe uma unica fonte versionada de mapeamento de intrinsic ids finais.
  2. Compiler nao depende de lista manual duplicada para esse mapeamento.
  3. CI falha quando runtime e compiler divergem em identidade/ID de intrinsic.
  4. Inclusao de nova intrinsic segue workflow documentado e testavel.

Tests

  1. :prometeu-compiler:prometeu-build-pipeline:test --tests *Intrinsic*
  2. Teste de paridade compiler-runtime dedicado.
  3. Smoke runtime-backed com intrinsic valido e id invalido.

Affected Documents

  1. docs/pbs/specs/6.1. Intrinsics and Builtin Types Specification.md
  2. docs/general/specs/20. IRBackend to IRVM Lowering Specification.md
  3. docs/general/specs/22. Backend Spec-to-Test Conformance Matrix.md
  4. ../runtime/docs/runtime/specs/06-input-peripheral.md
  5. ../runtime/docs/runtime/specs/02-vm-instruction-set.md

Open Questions

  1. Melhor local da fonte unica: repo runtime, repo studio, ou pacote compartilhado dedicado?