prometeu-studio/docs/compiler/pbs/pull-requests/PR-19.6-pbs-semantics-lifecycle-init-frame-and-initallowed-validation.md

83 lines
2.3 KiB
Markdown

# PR-19.6 - PBS Semantics for Lifecycle Markers, Init Ordering, and InitAllowed Validation
## Briefing
Com globals e seu dependency graph fechados, a ultima frente semantica da familia `19` precisa validar a camada de lifecycle:
1. `[Init]`,
2. `[Frame]`,
3. ordenacao por arquivo/modulo/projeto,
4. e admissibilidade de host calls via `[InitAllowed]`.
## Target
Implementar a validacao de:
1. signatures de `[Init]` e `[Frame]`,
2. unicidade e colocacao de `[Frame]`,
3. um `[Init]` por arquivo,
4. elevacao do `[Init]` co-localizado com `[Frame]` para project init,
5. restricao de host calls durante init.
## Dependencies
Prerequisitos diretos:
1. `PR-19.3`
2. `PR-19.5`
## Scope
1. Validar `fn name() -> void` para `[Init]` e `[Frame]`.
2. Validar unicidade de `[Frame]` por projeto executavel.
3. Validar que project init e o `[Init]` no mesmo arquivo do `[Frame]`.
4. Validar que arquivos podem ter no maximo um `[Init]`.
5. Validar host call em init apenas quando o target SDK carregar `[InitAllowed]`.
## Non-Goals
1. Nao implementar ainda wrapper publicado.
2. Nao implementar ainda callables sinteticos de lowering.
3. Nao produzir ainda artifacts de conformance finais.
## Method
1. Construir a semantica de lifecycle em cima do ordering ja definido para globals.
2. Tratar module init e project init como diferenca de ordenacao e papel, nao de syntax.
3. Validar `[InitAllowed]` somente em host methods da SDK.
## Acceptance Criteria
1. `[Init]` e `[Frame]` exigem `fn name() -> void`.
2. Existe exatamente um `[Frame]` por projeto executavel.
3. `project init` e identificado apenas no arquivo do `[Frame]`.
4. Um arquivo nao pode declarar mais de um `[Init]`.
5. Host calls em init sem `[InitAllowed]` sao rejeitadas.
6. Uso invalido de `[InitAllowed]` e rejeitado.
## Tests
1. Fixtures positivas para:
- file `[Init]`,
- project `[Init]`,
- `[Frame]`,
- loops em init,
- host call admissivel com `[InitAllowed]`.
2. Fixtures negativas para:
- assinatura invalida,
- multiplos `[Frame]`,
- project init fora do arquivo do `[Frame]`,
- multiplos `[Init]` no arquivo,
- host call sem `[InitAllowed]`,
- `[InitAllowed]` em target invalido.
## Affected Artifacts
1. validadores semanticos/lifecycle PBS
2. admission de host methods em init
3. testes de lifecycle e diagnostics
## Open Questions
1. Nenhuma. O passo seguinte e lowering.