83 lines
2.3 KiB
Markdown
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.
|