docs(mir): document KeepAlive/ReleaseStrong lifecycle directives
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user