Files
hakorune/docs/説明書/mir-unified-reference.md
Moe Charm 3df87fb1ce fix(phase-4.3c-3): Fix StringBox literal handling in MIR builder
Phase 4-3c-3 Complete: WASM host functions now correctly output string content

## Changes:
- Fixed MIR builder to handle StringBox with string literal arguments
- Special case for  to generate proper string constants
- Removed debug output after successful verification
- WASM now correctly outputs "Hello MIR!" instead of "StringBox"

## Test Results:
- MIR generation:  Generates  correctly
- WASM compilation:  String data correctly placed at offset 4096
- WASM execution:  Outputs "Hello MIR\!" as expected

## Technical Details:
- Modified build_new_expression() to detect StringBox with literal arguments
- Generates Const instruction with actual string content
- Host function reads StringBox memory layout correctly

This completes the WASM string output functionality for Phase 4.

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-17 13:49:35 +09:00

8.6 KiB
Raw Blame History

🤖 Nyash MIR (Mid-level Intermediate Representation) - 統合リファレンス

26命令削減実装中・ChatGPT5仕様準拠 - 2025年8月17日版

🚨 重要: MIR命令削減プロジェクト進行中

現状: 35命令実装175%膨張)→ 目標: 26命令ChatGPT5仕様
Gemini評価: 削減戦略「極めて健全」「断行推奨」

🎯 MIR概要

Nyash MIRは、Everything is Box哲学を基盤とした中間表現です。現在35命令が実装され、インタープリター・VM・WASM・AOTの全バックエンドで統一された実行を実現します。

🌟 主要特徴

  • Everything is Box: 全データがBoxオブジェクトとして統一表現
  • Effect System: pure/mut/io/control効果による最適化基盤
  • 所有権管理: 強参照森ownership forest+ weak参照システム
  • 非同期対応: Future/Bus操作の言語レベル統合
  • FFI/ABI統合: ExternCall命令による外部API統一呼び出し

🏗️ 命令分類 - 35命令全体系

Tier-0: コア演算 (8命令)

基本的な計算・制御フロー命令

命令 形式 効果 説明
Const %dst = const value pure 定数値生成
BinOp %dst = %lhs op %rhs pure 二項演算(+,-,*,/等)
UnaryOp %dst = op %operand pure 単項演算not, neg等
Compare %dst = %lhs cmp %rhs pure 比較演算(==, !=, <等)
Branch br %cond -> %then, %else control 条件分岐
Jump jmp %target control 無条件ジャンプ
Return ret %value? control 関数戻り
Phi %dst = phi [%val1:%bb1, %val2:%bb2] pure SSA φ関数

Tier-1: メモリ・関数操作 (8命令)

メモリアクセス・関数呼び出し・型操作

命令 形式 効果 説明
Load %dst = load %ptr pure メモリ読み取り
Store store %value -> %ptr mut メモリ書き込み
Call %dst = call %func(%args...) context 関数呼び出し
BoxCall %dst = %box.method(%args...) context Boxメソッド呼び出し
NewBox %dst = new_box "Type"(%args...) mut Box生成
TypeCheck %dst = type_check %box "Type" pure 型チェック
Cast %dst = cast %value as Type pure 型変換
Copy %dst = copy %src pure 値コピー

Tier-2: 配列・デバッグ・制御 (7命令)

配列操作・デバッグ・例外処理

命令 形式 効果 説明
ArrayGet %dst = %array[%index] pure 配列要素取得
ArraySet %array[%index] = %value mut 配列要素設定
Debug debug %value "message" io デバッグ出力
Print print %value io コンソール出力
Nop nop pure 無操作
Throw throw %exception control 例外発生
Catch catch %type -> %handler control 例外捕捉

Tier-3: 参照・非同期・外部API (12命令)

所有権管理・非同期処理・外部連携

命令 形式 効果 説明
Safepoint safepoint io セーフポイント
RefNew %dst = ref_new %box pure 参照生成
RefGet %dst = ref_get %ref.field pure 参照経由読み取り
RefSet ref_set %ref.field = %value mut 参照経由書き込み
WeakNew %dst = weak_new %box pure weak参照生成
WeakLoad %dst = weak_load %weak_ref pure weak参照読み取り
BarrierRead barrier_read %ptr io メモリバリア読み
BarrierWrite barrier_write %ptr io メモリバリア書き
FutureNew %dst = future_new %value mut Future生成
FutureSet future_set %future = %value mut Future値設定
Await %dst = await %future io Future待機
ExternCall %dst = extern_call iface.method(%args...) context 外部API呼び出し

🎭 Effect System - 4種類の効果

効果分類と最適化ルール

pub enum Effect {
    Pure,     // 再順序化可能、共通部分式除去可能
    Mut,      // 同一リソースで順序保持必要
    Io,       // 全順序保持必要(副作用あり)
    Control,  // 制御フロー変更
}

効果別命令分類

Pure命令 (15命令)

Const, BinOp, UnaryOp, Compare, Phi, Load, TypeCheck, Cast, Copy,
ArrayGet, Nop, RefNew, RefGet, WeakNew, WeakLoad

Mut命令 (7命令)

Store, NewBox, ArraySet, RefSet, FutureNew, FutureSet

Io命令 (6命令)

Debug, Print, Safepoint, BarrierRead, BarrierWrite, Await

Control命令 (4命令)

Branch, Jump, Return, Throw, Catch

Context依存命令 (3命令)

Call, BoxCall, ExternCall

効果は呼び出し先に依存

🔧 重要なMIR実装詳細

ExternCall命令 - FFI/ABI統合

ExternCall {
    dst: Option<ValueId>,
    iface_name: String,         // "env.console", "nyash.math"等
    method_name: String,        // "log", "sqrt"等
    args: Vec<ValueId>,
    effects: EffectMask,        // BID仕様から決定
}

用途: ブラウザーAPI・ネイティブライブラリ・プラグインの統一呼び出し

所有権管理システム

強参照森Ownership Forest

  • 各Boxは最大1つの強参照を持つin-degree ≤ 1
  • 強参照による循環は禁止DAG構造保証
  • NewBox, RefSetで所有権移転

weak参照システム

  • 所有権を持たない軽量参照
  • WeakNewで生成、WeakLoadで安全アクセス
  • 参照先削除時は自動的にnull化

非同期処理 - Future操作

%future = FutureNew %initial_value  // Future生成
FutureSet %future = %result         // 結果設定
%value = Await %future              // 結果取得(ブロッキング)

🚀 バックエンド別対応状況

実装済みバックエンド

バックエンド 対応命令数 主要用途 特徴
Interpreter 35/35 デバッグ・開発 全命令完全対応
VM 35/35 高速実行 レジスタベース
WASM 30/35 Web配布 ExternCall→import対応
AOT準備 計画中 ネイティブ LLVM IR生成予定

バックエンド固有の最適化

VM バックエンド

  • レジスタベース実行
  • 局所最適化ローカルBus elision
  • 直接スレッド化

WASM バックエンド

  • メモリ線形化(文字列は (ptr,len)
  • ExternCall → import宣言自動生成
  • ホスト側JavaScript連携

📊 MIR最適化パス

Pure命令最適化

  • 共通部分式除去 (CSE): 同一pure計算の除去
  • 不変コード移動 (LICM): ループ外移動
  • 定数畳み込み: コンパイル時計算

Effect-aware最適化

  • Mut順序保持: 同一リソースアクセス順序維持
  • Io順序保持: 全Io命令の順序保証
  • Bus elision: ローカル通信の直接アクセス化

🧪 テスト・検証

MIR検証項目

  • 所有権森検証: strong in-degree ≤ 1
  • 強循環禁止: 強参照のDAG構造保証
  • weak参照安全性: 失効時null化
  • 効果注釈正確性: 各命令の効果分類
  • 型安全性: Box型システム整合性

バックエンド互換性テスト

# 全バックエンドMIR一致テスト
./target/release/nyash --dump-mir program.nyash > interpreter.mir
./target/release/nyash --backend vm --dump-mir program.nyash > vm.mir
./target/release/nyash --backend wasm --dump-mir program.nyash > wasm.mir
diff interpreter.mir vm.mir && diff vm.mir wasm.mir

🔮 将来計画

Phase 10: AOT/JIT対応

  • LLVM IR生成バックエンド
  • ExternCall → ネイティブ関数呼び出し
  • 高度な最適化パス統合

Phase 11: MIR v2設計

  • 命令数最適化35 → 25命令目標
  • BID統合Box Interface Definition
  • リソース所有権拡張own, borrow

📚 関連ドキュメント

  • FFI/ABI仕様: docs/説明書/reference/box-design/ffi-abi-specification.md
  • 実装詳細: src/mir/instruction.rs
  • Phase計画: docs/予定/native-plan/copilot_issues.txt

最終更新: 2025年8月17日
実装ベース: 35命令完全対応
次期計画: BID統合プラグインシステムPhase 9.75f-BID