2025-12-27 01:03:24 +09:00
|
|
|
|
# Phase 29y (future, post self-host / docs-first): MIR lifecycle vocab freeze(RC/weak/ABI)
|
|
|
|
|
|
|
|
|
|
|
|
Status: Draft (docs-first)
|
|
|
|
|
|
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`
|
|
|
|
|
|
|
|
|
|
|
|
## Non-goals (Phase 29y ではやらない)
|
|
|
|
|
|
|
|
|
|
|
|
- MIR 命令語彙の大改造(所有モデルを型に埋め込む等)
|
|
|
|
|
|
- self-host 前の NyRT の .hako 化(実装は別フェーズ)
|
|
|
|
|
|
- GC/finalizer の新規実装(境界の明文化まで)
|
|
|
|
|
|
|
|
|
|
|
|
## Deliverables (最大 3 つに切る)
|
|
|
|
|
|
|
|
|
|
|
|
Phase 29y を “締める” 条件は実装ではなく、次フェーズへ切れること。
|
|
|
|
|
|
|
|
|
|
|
|
1. **ABI SSOT**: NyRT ABI(最小セット)+ 関数 ABI(args 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 に固定
|
|
|
|
|
|
|
2025-12-27 01:11:36 +09:00
|
|
|
|
Docs(Phase 29y 内の SSOT):
|
|
|
|
|
|
- ABI SSOT: `docs/development/current/main/phases/phase-29y/10-ABI-SSOT.md`
|
|
|
|
|
|
- RC insertion SSOT: `docs/development/current/main/phases/phase-29y/20-RC-INSERTION-SSOT.md`
|
|
|
|
|
|
- Observability SSOT: `docs/development/current/main/phases/phase-29y/30-OBSERVABILITY-SSOT.md`
|
|
|
|
|
|
|
2025-12-27 02:07:10 +09:00
|
|
|
|
## Implementation Pilot (Phase 29y.1)
|
|
|
|
|
|
|
|
|
|
|
|
Phase 29y は docs-first が主目的だが、後続の実装フェーズへ迷わず切るために “最小の導線” を先に用意する。
|
|
|
|
|
|
|
|
|
|
|
|
- Task 1: NyRT handle ABI shim(lifecycle)
|
|
|
|
|
|
- `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.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 では未可視)
|
|
|
|
|
|
|
2025-12-27 01:03:24 +09:00
|
|
|
|
## 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 表示)
|
|
|
|
|
|
|
|
|
|
|
|
## Related
|
|
|
|
|
|
|
|
|
|
|
|
- lifecycle semantics SSOT: `docs/reference/language/lifecycle.md`
|
|
|
|
|
|
- Phase 285(weak conformance / hidden root 根治): `docs/development/current/main/phases/phase-285/README.md`
|