Files
hakorune/docs/development/current/main/20-Decisions.md

33 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Self Current Task — Decisions (main)
20251213
- JoinIR lowering の name-based 変数解決は、dev-only`normalized_dev`)で BindingId-based に段階移行するdual-path を維持)。
- promoted carriersDigitPos/Trim などの synthetic nameは、`BindingId(original) → BindingId(promoted) → ValueId(join)` の鎖で接続し、by-name ルール分岐は導入しない。
- debug/観測は既存のフラグ(例: `NYASH_JOINIR_DEBUG`)に集約し、新しい環境変数のスパローは避ける。
20251219
- return の表現力拡張は「パターン総当たり」ではなく、pure expression を扱う `NormalizedExprLowererBox`AST walkerへ収束させるPhase 140
- Call/MethodCall は effects + typing の論点が増えるため、pure とは分離して Phase 141+ で段階投入する。
- out-of-scope は `Ok(None)` で既存経路へフォールバックし、既定挙動不変を維持するstrict は “close-but-unsupported” のみ fail-fast
20251220
- Phase 256 の詰まりJump/continuation/params/jump_argsを「暗黙 ABI の分裂」と捉え、契約を `JoinIR ABI/Contract` として明文化していくSSOT を 1 箇所へ集約)。
- continuation の識別は ID を SSOTString は debug/serialize 用)とし、`join_func_N` の legacy は alias で隔離する。
- `jump_args` は意味論の SSOT なので、最終的には MIR terminator operand に統合して DCE/CFG から自然に追える形へ収束させるPhase 256 を緑に戻した後に段階導入)。
- 上記の収束先north starを “Join-Explicit CFG Construction” と命名し、段階移行案1→案2→必要なら案3で進める。
- 正規化normalized**Semantic/Plumbing** に分離し、`NormalizeBox`意味SSOT/ `AbiBox`役割SSOT/ `EdgeArgsPlumbingBox`配線SSOTの最小セットで “推測禁止 + Fail-Fast” を維持する。
- spans は並行 Vec を最終的に廃止し、`Vec<Spanned<_>>` へ収束(段階導入: 編集APIの一本化 → 内部表現切替)。
- edge-args の参照 API は `Jump` だけでなく `Branch` を含むため、単発 `edge_args()` ではなく `out_edges()`/`edge_args_to(target)` のような “複数 edge” 前提の参照点を SSOT にする。
20251221
- MIR 側の block-parameterized CFG を短い通称として **EdgeCFG** と呼ぶdocs では “Block-Parameterized CFGEdgeCFG
- EdgeCFG の P2`BasicBlock.jump_args` 削除まで到達し、edge-args は `Jump/Branch` の terminator operand を SSOT に一本化するReturn は `return_env` のみ例外)。
- 「pattern番号で推測分岐」は長期的に消したい。Structured→CFG lowering の中心概念を **ExitKind + Fragfragment**へ移し、pattern は “Extractor/Plan の薄い層” に縮退させる設計SSOT: `docs/development/current/main/design/edgecfg-fragments.md`)。
20250908
- ループ制御は既存命令Branch/Jump/Phiで表現し、新命令は導入しない。
- Builder に loop_ctx{head, exit}を導入し、continue/break を分岐で降ろす。
- Verifier の支配関係/SSA を崩さないよう、単一 exit と postterminated 後の emit 禁止を徹底。
- VInvokevector 経路)の戻り値は、短期は「既知メソッドの整数返り」を特例扱いで保持し、
中期は nyash.toml の戻り型ヒント or NyRT シムの期待フラグで正道化。