5.1 KiB
| id | ticket | title | status | created | resolved | decision | tags | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| AGD-0006 | pbs-game-facing-asset-refs-and-call-result-discard | PBS Game-Facing Asset References and Ignored Call Result Lowering | open | 2026-03-27 |
|
Pain
PBS ainda tem dois atritos abertos na fronteira entre ergonomia de código de jogo e lowering executável:
- referências a assets continuam centradas em
asset_nameno código-fonte, enquanto packer/runtime já convergiram para identidade estável porasset_id; expression statementscom retorno materializado ainda precisam de política explícita de descarte, para não vazar regra de stack do backend para o código de usuário.
Os dois temas pertencem à mesma discussão porque tratam da mesma pergunta arquitetural:
Como PBS deve preservar uma superfície de autoria natural sem sacrificar determinismo no lowering e no runtime?
Context
Esta agenda consolida dois tópicos legados do domínio PBS:
18.4. Asset References in Game Code - Names vs Compile-Time Lowering18.5. Ignored Call Results in Executable Lowering
Os pontos estáveis já conhecidos são:
- packer/runtime tratam
asset_idcomo identidade estável; asset_nameainda é a superfície mais natural para autoria e tooling;- o pipeline executável hoje já exige disciplina explícita de stack;
- a família
19reforçou a direção de compiler-owned lowering e publication protocol, reduzindo espaço para ambiguidades “aceitas pelo frontend, rejeitadas mais tarde”.
Isso sugere um princípio comum:
- a linguagem pode continuar amigável na superfície,
- mas o compiler precisa assumir explicitamente o trabalho de normalizar essa superfície para um contrato executável estável.
Open Questions
- Referências a asset devem permanecer nomeadas na superfície PBS, mesmo se o lowering resolver parte delas para identidade estável?
- O descarte de retorno ignorado deve ser uma regra geral de
expression statement, ou uma exceção localizada para certos callsites? - Até onde PBS quer empurrar “surface ergonomics, compiler normalization” como princípio geral para APIs de jogo?
- Quais casos precisam continuar dinâmicos em runtime e portanto não podem ser lowered agressivamente em compile time?
- Devemos publicar warnings opcionais para retorno ignorado ou rename-fragile asset references, ou isso fica fora do escopo inicial?
Options
Option A - Keep Surface Simple, Keep Runtime Rules Visible
- Approach: manter
asset_namecomo referência de longo prazo e exigir consumo explícito de retornos quando houver valor materializado. - Pro: modelo simples e pouco invasivo.
- Con: vaza custo operacional e detalhe de lowering para código-fonte; mantém fragilidade de rename e lookup tardio.
- Maintainability: baixa a média, porque o autor continua negociando diretamente com limites do backend/runtime.
Option B - Preserve Surface Ergonomics, Normalize in the Compiler
- Approach: manter superfície amigável (
asset_name,foo();) e explicitar no compiler as normalizações necessárias, como lowering para identidade estável quando possível e descarte automático de resultados ignorados emexpression statement. - Pro: separa melhor autoria de protocolo executável; fica alinhado com a direção já adotada na família
19. - Con: aumenta responsabilidade do compiler e exige regras claras de quando a normalização pode ou não ocorrer.
- Maintainability: alta, porque o contrato passa a ficar onde ele deveria estar: no compiler e nas specs de lowering.
Option C - Introduce Rich Resource and Effect Surfaces
- Approach: criar abstrações mais fortes para recursos e resultados descartáveis, com novos tipos/superfícies na linguagem.
- Pro: potencialmente o modelo mais explícito e expressivo no longo prazo.
- Con: escopo bem maior; mistura redesign de linguagem com problemas que talvez possam ser resolvidos por lowering.
- Maintainability: incerta no curto prazo; só compensa se PBS quiser investir em abstrações novas, não apenas fechar lacunas atuais.
Discussion
As duas agendas legadas apontam para a mesma direção recomendada:
- preservar ergonomia de autoria;
- e mover o peso de normalização para o compiler.
Isso não significa “magia implícita sem limite”. Significa assumir, de forma normativa, que a superfície PBS pode ser mais estável e legível do que o protocolo executável final.
O ponto central desta discussão é definir o limite dessa política:
- quando PBS só normaliza lowering,
- e quando precisa criar uma abstração nova de linguagem.
Resolution
Direção recomendada por enquanto:
- tratar os dois temas como uma única discussão de política de surface-versus-lowering em PBS;
- preferir a direção Option B como baseline;
- fechar depois duas decisões derivadas:
- política de asset references para código de jogo;
- política de descarte de retorno ignorado em
expression statement;
- evitar introduzir nova abstração de linguagem antes de esgotar a via de normalização no compiler.