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

3.5 KiB
Raw Blame History

Self Current Task — Decisions (main)

20251213

  • JoinIR lowering の name-based 変数解決は、dev-onlynormalized_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 を扱う NormalizedExprLowererBoxAST 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で進める。
  • 正規化normalizedSemantic/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 の P2BasicBlock.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 シムの期待フラグで正道化。