prometeu-studio/docs/compiler/pbs/pull-requests/PR-19.5-pbs-semantics-global-dependency-graph-and-cycle-validation.md

67 lines
2.1 KiB
Markdown

# PR-19.5 - PBS Semantics for Global Dependency Graph and Cycle Validation
## Briefing
Depois da superficie semantica local de `global`, PBS precisa implementar o ordering deterministico e a deteccao de ciclos entre globals usando o kernel compartilhado `DependencyGraphAnaliser`.
Esta PR fecha a parte de semantica que transforma leituras em initializers no graph canonico de globals.
## Target
Implementar:
1. nos canonicos de globals por owner module,
2. edges derivadas de leitura de globals em initializers,
3. ordering deterministico independente de source-file order,
4. diagnostico de ciclo entre globals.
## Dependencies
Prerequisitos diretos:
1. `PR-19.2`
2. `PR-19.4`
## Scope
1. Construir o graph semantico de globals.
2. Resolver alias/import para owner canonico.
3. Reusar `DependencyGraphAnaliser` como kernel estrutural.
4. Emitir diagnostico de ciclo com caminho canonicamente util quando possivel.
## Non-Goals
1. Nao validar ainda `[Init]` / `[Frame]`.
2. Nao implementar init sintetico de modulo.
3. Nao implementar lowering.
## Method
1. Modelar cada global como no canonico `(module, global_name)` ou equivalente interno estavel.
2. Criar edge quando initializer depende do valor materializado de outro global.
3. Usar ordering deterministico para fixar ordem de materializacao.
4. Manter source-file order fora da semantica.
## Acceptance Criteria
1. Ordering de globals e estavel e independe de ordem textual de arquivos.
2. Imports e aliases nao quebram identidade canonica do storage owner.
3. Ciclos intra-modulo e inter-modulo sao detectados como compile-time error.
4. Diagnostics apontam para globals reais, nao para estrutura sintetica.
## Tests
1. Fixtures positivas para dependency chains intra e inter-modulo.
2. Fixtures que provem mesma ordem mesmo com source-file order trocada.
3. Fixtures negativas para ciclos simples e ciclos via import/alias.
## Affected Artifacts
1. semantica de globals PBS
2. `DependencyGraphAnaliser` consumers
3. testes de dependency ordering/cycle diagnostics
## Open Questions
1. Nenhuma. A integracao com module/project init fica para `PR-19.6`.