docs(mir): document KeepAlive/ReleaseStrong lifecycle directives

This commit is contained in:
2025-12-27 01:07:46 +09:00
parent 348b19f42d
commit 47493b95ce

View File

@ -1,11 +1,12 @@
# Nyash MIR Instruction Set (Canonical 26 → migrating to Core-15 → Core-14)
Status: Canonical (Source of Truth) — transitioning
Last Updated: 2025-09-01
Last Updated: 2025-12-27
この文書はNyashのMIR命令セットの唯一の参照現状は26命令だよ。Core-15 への段階移行を進めており、さらに Phase 12 で Core-14 へPluginInvoke → BoxCall 統合。安定次第この文書を14命令へ更新し、テスト固定数も切り替える移行中は26を維持
注意: Debug/Nop/Safepointはビルドモードでの降格用メタ命令であり、コア命令数には数えない。
注意: KeepAlive/ReleaseStrong は lifecycle conformance のための命令weak/hidden-root 対策であり、Core-14/15 の最小コア数には数えない(ただし backend が実行する “実命令” である)。
Transition Note
@ -20,6 +21,7 @@ Transition Note
- VM層でC ABI/Nyash ABI/Scriptプラグインを自動判定
- VM/JIT の代表的な Core-15 カバー手順は `docs/reference/mir/MIR15_COVERAGE_CHECKLIST.md` を参照。
- Core-14 安定後に本ドキュメントの「Core Instructions」を14命令へ更新し、マッピング表を併記する。
- Phase 285287: lifecycle conformance のため `KeepAlive` / `ReleaseStrong` を追加(語彙の明確化)。
## Core Instructions26
- Const
@ -49,6 +51,17 @@ Transition Note
- WeakRefWeakNew/WeakLoad統合
- BarrierRead/Write統合
## Lifecycle (実命令; Core-14/15 のカウント外)
これらは “最適化のための寿命” ではなく、言語の binding scope / explicit drop と weak 観測(`weak_to_strong()`)の整合を保つための命令。
- KeepAlivePURE
- Meaning: 指定された値を、そのスコープ終端まで “生存しているものとして扱う” ための指示liveness/DCE対策
- Backend: 実行時の処理は no-op でも良いが、解析上は used-values として扱う必要がある。
- ReleaseStrongWRITE
- Meaning: 指定された値が保持している strong root を明示的に落とす(典型: 変数上書き)。
- Backend: 同一 object を参照する aliasSSA copy 等)も含めて解放対象にできる(実装都合)。
## Core-15Target; 移行中の最小コア)
- 基本演算(5): Const, UnaryOp, BinOp, Compare, TypeOp
- メモリ(2): Load, Store