3.6 KiB
| id | ticket | title | status | created | accepted | agenda | plans | tags | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| DEC-0006 | pbs-game-facing-asset-refs-and-call-result-discard | PBS Ignored Values Lowering and Warning Policy | accepted | 2026-03-27 | 2026-03-27 | AGD-0006 |
|
|
Context
PBS ainda precisava fixar o comportamento de expression statements cujo valor produzido não é consumido.
Sem essa decisão, a disciplina de stack do backend continua vazando para a surface do autor:
- alguns callsites com retorno materializado ficam semanticamente ambíguos;
- a política de descarte pode ficar implícita demais ou inconsistente entre passes;
- o usuário não recebe feedback claro quando ignora um valor que a linguagem materializou.
Essa discussão não exige uma exceção por API específica. Ela exige uma regra geral de linguagem com lowering e diagnóstico previsíveis.
Decision
PBS SHALL adotar uma regra geral para ignored values em expression statement.
Quando uma expressão usada como statement produzir um valor materializado que não seja consumido, o compiler SHALL:
- lowerar explicitamente o descarte desse valor;
- emitir um warning na v1.
Essa política SHALL ser geral, e não uma exceção localizada para certos callsites ou certas superfícies de API.
O warning inicial SHALL existir como baseline diagnóstica da linguagem. Refinamentos futuros de severidade, suppressions ou subcategorias MAY acontecer depois, mas não bloqueiam esta decisão.
Rationale
Essa regra resolve a tensão principal da agenda:
- a autoria continua simples, porque o usuário pode escrever uma expressão como statement;
- o protocolo executável continua explícito, porque o compiler assume o descarte;
- a linguagem continua honesta, porque o usuário recebe um warning quando ignora um valor material.
Isso é superior a duas alternativas piores:
- exigir consumo explícito de todo valor sempre, empurrando ruído operacional para o source;
- ou descartar silenciosamente tudo, removendo feedback útil em situações potencialmente equivocadas.
Technical Specification
1. General Rule
- Any PBS
expression statementthat produces a materialized value and does not consume it SHALL trigger ignored-value handling. - Ignored-value handling SHALL consist of:
- explicit lowering for value discard;
- a warning diagnostic.
2. Scope
- The rule SHALL apply generally across expression statements.
- The rule MUST NOT be restricted to asset-facing APIs, host-backed calls, or any single subsystem.
- The rule MAY apply equally to pure or impure expressions if the language surface materializes a value that is then ignored.
3. Lowering Ownership
- The compiler backend SHALL remain responsible for the executable lowering that discards the value.
- Frontend diagnostics MAY identify the situation earlier if architecture permits, but the normative executable behavior remains compiler-owned.
4. Diagnostic Policy
- The baseline v1 diagnostic level SHALL be warning.
- Future work MAY define suppression mechanisms, lint categories, escalation rules, or context-sensitive exemptions.
- No such refinement is required to consider this decision accepted.
Constraints
- PBS MUST keep the rule general and easy to explain.
- PBS MUST NOT depend on backend stack discipline leaking into source-level author decisions.
- PBS MUST NOT require API-by-API bespoke ignored-value semantics as the baseline language policy.
Revision Log
- 2026-03-27: Initial accepted decision from AGD-0006.
- 2026-03-27: Locked ignored values as a general lowering rule with warning severity in v1.