1.5 KiB
1.5 KiB
付録B: 効果注釈と Safepoint/Barrier 最小規約
Effect Mask(最小分類)
- Pure: Const/BinOp/Compare/Phi(参照透過)
- Call: ユーザー関数呼出(副作用不定、配置に応じてSafepoint許容)
- BoxCall: Boxメッセージ呼出(副作用あり得る、Barrier要否は対象に依存)
- Extern: ランタイム/プラグイン呼出(FFI境界)
- MemRead/MemWrite: メモリ読み/書き(Core‑13ではBarrierで抽象化)
- Safepoint: 安全点(GC/割込み協調用、停止可能点)
- Barrier: 読み/書きバリア(世代間/弱参照などの最小表現)
注: 実装では ExternCall/BoxCall に対し、必要最小の Barrier を付与(下位最適化で除去可能)。
Safepoint 挿入の指針(最小)
- ループヘッダ: 長期ループの先頭に1箇所(LoopFormなら loop.begin 直後 or ヘッダブロック)
- 長期待機/FFI後: ブロッキングや長期外部呼出の復帰箇所
- コンパクション/停止要求: ランタイムのポリシーに従い、明示Safepointを挿入
Barrier の指針(最小)
- 書き込み: 参照フィールド書換時(世代間/弱参照の一貫性確保)
- 読み出し: 弱参照/エポック制御の必要時のみ
- 下位最適化: 隣接Barrierの併合/削除を許可
この最小規約は、Core‑13 の命令が少ないほど効果が曖昧にならないよう、注釈で差を表現する思想に基づく。