4.6 KiB
4.6 KiB
Phase 29y (future, post self-host / docs-first): MIR lifecycle vocab freeze(RC/weak/ABI)
Status: Ready (P0 complete - docs-first SSOT finalized) Scope: self-host 後に "脱Rustランタイム(NyRT/.hako)" を進める前提で、MIR の lifecycle/RC/weak を どこまで語彙として固定し、どこからを **runtime ABI(NyRT)**に委譲するかを SSOT 化する。
Entry
- 相談パケット(SSOT):
docs/development/current/main/investigations/phase-29y-mir-lifecycle-vocab-consult.md 次の指示書(P0, docs-only)✅ 完了:docs/development/current/main/phases/phase-29y/P0-DOCS-FINALIZE-INSTRUCTIONS.md
Non-goals (Phase 29y ではやらない)
- MIR 命令語彙の大改造(所有モデルを型に埋め込む等)
- self-host 前の NyRT の .hako 化(実装は別フェーズ)
- GC/finalizer の新規実装(境界の明文化まで)
Deliverables (最大 3 つに切る)
Phase 29y を “締める” 条件は実装ではなく、次フェーズへ切れること。
- ABI SSOT: NyRT ABI(最小セット)+ 関数 ABI(args borrowed / return owned など)を docs に固定
- RC insertion SSOT: retain/release/weak_drop の発火点を “1箇所” に寄せる設計(Frag 前後)を docs に固定
- Observability SSOT: hidden root を追える観測点(root面の定義、診断API、smokeは exit code SSOT)を docs に固定
Docs(Phase 29y 内の SSOT - ✅ P0 complete, all Ready):
- ABI SSOT:
docs/development/current/main/phases/phase-29y/10-ABI-SSOT.md✅ Ready - RC insertion SSOT:
docs/development/current/main/phases/phase-29y/20-RC-INSERTION-SSOT.md✅ Ready - Observability SSOT:
docs/development/current/main/phases/phase-29y/30-OBSERVABILITY-SSOT.md✅ Ready
Implementation Pilot (Phase 29y.1)
Phase 29y は docs-first が主目的だが、後続の実装フェーズへ迷わず切るために “最小の導線” を先に用意する。
- Task 1: NyRT handle ABI shim(lifecycle)
crates/nyash_kernel/src/ffi/lifecycle.rscrates/nyash_kernel/src/ffi/mod.rscrates/nyash_kernel/src/lib.rs- fixture:
apps/tests/phase29y_handle_abi.hako - smokes:
tools/smokes/v2/profiles/integration/apps/phase29y_handle_abi_{vm,llvm}.sh
- Task 2: RC insertion pass 入口(skeleton, no-op)
src/mir/passes/rc_insertion.rssrc/mir/passes/mod.rssrc/mir/mod.rs(compiler pipeline に接続)
- Task 3: Observability MVP(root categories: handles のみ)
src/runtime/leak_tracker.rs- Phase 1 limitation を明示(locals/temps/heap_fields/singletons は exit-time では未可視)
Current Recommendation (consultation summary)
- 実体: RC の値と Alive/Dead/Freed 判定は runtime(NyRT)に置く
- 発火点: retain/release/weak_drop は分散せず、CFG確定後の “1回だけ” の挿入パスで SSOT 化
- 関数ABI: args borrowed / return owned(borrowed を保存/返す場合のみ retain)
- weak identity: alloc_id + generation token を SSOT 化(ログも token 表示)
Next Steps(実装フェーズへ切るための最小タスク)
Phase 29y は docs-first を完了し、次フェーズ(Phase 29x/29z など)へ迷わず移れる状態になった。
以下の実装タスク(最大3つ)を次フェーズで進める:
-
RC insertion pass の最小動作化
- 現状:
src/mir/passes/rc_insertion.rsは no-op skeleton - 次: 保持・解放の1ケースだけを実装(上書き時の release のみ)
- 目的: CFG確定後の挿入点を実証し、SSOT(20-RC-INSERTION-SSOT.md)の妥当性を検証
- 現状:
-
ABI borrowed/owned conformance smoke 追加
- 現状:
phase29y_handle_abi_{vm,llvm}.shは最小ケース(1 fixture のみ) - 次: borrowed args / owned return の conformance を1本追加
- 目的: 関数ABI契約(10-ABI-SSOT.md §3)を実際の smoke で固定
- 現状:
-
Observability root categories 拡張
- 現状:
leak_tracker.rsは handles のみ可視(Phase 1 limitation) - 次: locals または temps のいずれか1つを root summary に追加
- 目的: root面カテゴリ(30-OBSERVABILITY-SSOT.md §1)の観測実装を1段進める
- 現状:
受け入れ基準:
- quick 154/154 PASS 維持
- integration smokes の phase29y_* が green 維持
- 恒常ログ増加なし
Next Phase 候補: Phase 29z(RC insertion minimal)または Phase 29x(De-Rust runtime)
Related
- lifecycle semantics SSOT:
docs/reference/language/lifecycle.md - Phase 285(weak conformance / hidden root 根治):
docs/development/current/main/phases/phase-285/README.md