Files
hakorune/docs/development/current/main/phases/phase-29y/README.md

4.6 KiB
Raw Blame History

Phase 29y (future, post self-host / docs-first): MIR lifecycle vocab freezeRC/weak/ABI

Status: Ready (P0 complete - docs-first SSOT finalized) Scope: self-host 後に "脱RustランタイムNyRT/.hako" を進める前提で、MIR の lifecycle/RC/weak を どこまで語彙として固定し、どこからを **runtime ABINyRT**に委譲するかを 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 を “締める” 条件は実装ではなく、次フェーズへ切れること。

  1. ABI SSOT: NyRT ABI最小セット+ 関数 ABIargs borrowed / return owned など)を docs に固定
  2. RC insertion SSOT: retain/release/weak_drop の発火点を “1箇所” に寄せる設計Frag 前後)を docs に固定
  3. Observability SSOT: hidden root を追える観測点root面の定義、診断API、smokeは exit code SSOTを docs に固定

DocsPhase 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 shimlifecycle
    • crates/nyash_kernel/src/ffi/lifecycle.rs
    • crates/nyash_kernel/src/ffi/mod.rs
    • crates/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.rs
    • src/mir/passes/mod.rs
    • src/mir/mod.rscompiler pipeline に接続)
  • Task 3: Observability MVProot 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 判定は runtimeNyRTに置く
  • 発火点: retain/release/weak_drop は分散せず、CFG確定後の “1回だけ” の挿入パスで SSOT 化
  • 関数ABI: args borrowed / return ownedborrowed を保存/返す場合のみ retain
  • weak identity: alloc_id + generation token を SSOT 化(ログも token 表示)

Next Steps実装フェーズへ切るための最小タスク

Phase 29y は docs-first を完了し、次フェーズPhase 29x/29z など)へ迷わず移れる状態になった。

以下の実装タスク最大3つを次フェーズで進める:

  1. RC insertion pass の最小動作化

    • 現状: src/mir/passes/rc_insertion.rs は no-op skeleton
    • 次: 保持・解放の1ケースだけを実装上書き時の release のみ)
    • 目的: CFG確定後の挿入点を実証し、SSOT20-RC-INSERTION-SSOT.mdの妥当性を検証
  2. 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 で固定
  3. 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 29zRC insertion minimalまたは Phase 29xDe-Rust runtime

  • lifecycle semantics SSOT: docs/reference/language/lifecycle.md
  • Phase 285weak conformance / hidden root 根治): docs/development/current/main/phases/phase-285/README.md