From 47493b95ce02834ee991a0d6b5d01c1ae411a452 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Sat, 27 Dec 2025 01:07:46 +0900 Subject: [PATCH] docs(mir): document KeepAlive/ReleaseStrong lifecycle directives --- docs/reference/mir/INSTRUCTION_SET.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/reference/mir/INSTRUCTION_SET.md b/docs/reference/mir/INSTRUCTION_SET.md index e074df33..a802907e 100644 --- a/docs/reference/mir/INSTRUCTION_SET.md +++ b/docs/reference/mir/INSTRUCTION_SET.md @@ -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 285–287: lifecycle conformance のため `KeepAlive` / `ReleaseStrong` を追加(語彙の明確化)。 ## Core Instructions(26) - Const @@ -49,6 +51,17 @@ Transition Note - WeakRef(WeakNew/WeakLoad統合) - Barrier(Read/Write統合) +## Lifecycle (実命令; Core-14/15 のカウント外) + +これらは “最適化のための寿命” ではなく、言語の binding scope / explicit drop と weak 観測(`weak_to_strong()`)の整合を保つための命令。 + +- KeepAlive(PURE) + - Meaning: 指定された値を、そのスコープ終端まで “生存しているものとして扱う” ための指示(liveness/DCE対策)。 + - Backend: 実行時の処理は no-op でも良いが、解析上は used-values として扱う必要がある。 +- ReleaseStrong(WRITE) + - Meaning: 指定された値が保持している strong root を明示的に落とす(典型: 変数上書き)。 + - Backend: 同一 object を参照する alias(SSA copy 等)も含めて解放対象にできる(実装都合)。 + ## Core-15(Target; 移行中の最小コア) - 基本演算(5): Const, UnaryOp, BinOp, Compare, TypeOp - メモリ(2): Load, Store