Files
hakorune/docs/development/current/CURRENT_TASK.md

26 KiB
Raw Blame History

🎯 CURRENT TASK - 2025年8月25日状況整理

⏱️ 再開ショートカット(今日のフォーカス)

  • フォーカス: VM比較経路の安定化後片付け + 1000行分解の下準備
  • 目標: 一時ログ抑制・Phi正規化・基本ボックス統一String/Bool・VM分割の導線作成
  • 参照: docs/development/roadmap/phases/phase-9/phase_9_78h_mir_pipeline_stabilization.md

直近の実行タスク9.78h

  1. 一時デバッグログの抑制(NYASH_VM_DEBUG_*のみ)
    • 進捗: Runnerのバナー/プラグイン初期化ログは NYASH_CLI_VERBOSE/NYASH_DEBUG_PLUGIN のみで出力。 VMの逐次ログは NYASH_VM_DEBUG[_EXEC|_CMP|_ANDOR|_PHI] に限定。
  2. Phi正規化LoopExecutorの借用衝突解消 → 正しい選択へ復帰)
    • 進捗: VM側の選択を previous_block 基準に復帰fallback: 先頭)。NYASH_VM_DEBUG_PHI=1 でログ。
    • 設計: docs/development/current/PHI_NORMALIZATION_PLAN.md を参照(段階プラン/次アクション)。
  3. 基本ボックス統一StringBox/BoolBoxもre-export化
  4. VM分割の導線control_flow/dispatch/frameへ分離設計
    • 進捗: src/backend/{control_flow.rs,dispatch.rs,frame.rs} を追加(骨組み)。ビルド通過。
  5. 代表スナップショット追加compare/loop/typeop_mixed

すぐ試せるコマンド

cargo build --release -j32
nyash --dump-mir --mir-verbose local_tests/typeop_is_as_func_poc.nyash | sed -n '1,160p'
NYASH_OPT_DIAG_FAIL=1 nyash --dump-mir --mir-verbose local_tests/typeop_diag_fail.nyash || echo DIAG BLOCKED
tools/ci_check_golden.sh  # 代表ケースのMIR含有チェック

# 比較・論理のスモークVM
nyash --backend vm local_tests/compare_box_vm.nyash    # 期待: true
nyash --backend vm local_tests/and_or_vm.nyash         # 期待: false\ntrue
nyash --backend vm local_tests/and_or_truthy_vm.nyash  # 期待: false,true,false,true,false

重要リンク(唯一参照/ゲート)

  • 命令セット唯一出典・26命令: docs/reference/mir/INSTRUCTION_SET.md
  • 9.78h(本フェーズ詳細): docs/development/roadmap/phases/phase-9/phase_9_78h_mir_pipeline_stabilization.md
  • 9.79P2P本体 前提: 9.78h完了): docs/development/roadmap/phases/phase-9/phase_9_79_p2pbox_rebuild.md
  • Phase 10Cranelift JIT主経路: docs/development/roadmap/phases/phase-10/phase_10_cranelift_jit_backend.md

🚨 現在の状況2025-08-25

完了したタスク

  1. MIRビルダーリファクタリング完了🎉2025-08-25

    • mir/builder.rs: 1547行の大規模モジュール → モジュール分割完了
    • 新構造: src/mir/builder/ ディレクトリ
      • mod.rs: 公開API定義
      • core.rs: MirBuilder本体 + コア機能 (205行)
      • expressions.rs: 式変換処理 (621行) - 18関数実装済み
      • statements.rs: 文変換処理 (165行) - 6関数実装済み
      • control_flow.rs: 制御フロー構築 (194行) - 4関数実装済み
      • box_handlers.rs: Box関連処理 (73行) - 2関数実装済み
    • ビルド確認: 新構造でコンパイル正常完了
    • 総移動関数数: 30関数ヘルパー関数含む
    • 行数削減: 元の1547行から分割により読みやすさ大幅向上
    • コミット完了:
      • Phase 3-5: cc2a5c2 (expressions.rs)
      • Phase 6-8: 29af5e1 (statements/control_flow/box_handlers)
  2. VMモジュールのリファクタリング完了2025-08-25

    • execute_instruction関数を29個のハンドラーに分割
    • vm_instructions.rsモジュール作成487行
    • execute_instruction_old削除691行削減
    • vm.rs: 2075行→1382行33%削減)

🆕 進捗2025-08-25 夜)

  • VM and/or 対応の実装を追加(短絡評価は as_bool() 強制で統一、BoxRef(IntegerBox) の四則演算にも対応)。
  • ゴールデンTypeOp代表2ケースは緑のまま、Optimizer診断未lowering検知も動作確認済み。
  • ただし、VM実行時に Andexecute_binop の短絡ルートに入らず、execute_binary_op の汎用経路で Type error: Unsupported binary operation: And ... が発生。
    • 兆候: NYASH_VM_DEBUG_ANDOR のデバッグ出力が出ない=execute_binop に入っていない、または別実装ルートを通過している可能性。
    • 仮説: 古いVM経路の残存/リンク切替、もしくは実行時に別ビルド/別profileが使用されている。

🆕 進捗2025-08-26 早朝)

  • and/or 真理値強制の最終化: VMValue::as_bool() を拡張(BoxRef(IntegerBox)→非0でtrue、Void→false
  • テスト追加: local_tests/and_or_truthy_vm.nyash(期待: false,true,false,true,false)。緑を確認。
  • 基本ボックス統一(第一弾): IntegerBox を正典に一本化。
    • src/boxes/integer_box.rspub use crate::box_trait::IntegerBox; に置換し、実体の二重化を排除。
  • 既知の未解決: ループ比較で BoxRef(IntegerBox) < BoxRef(IntegerBox) が TypeError。
    • 対応中: 比較前に i64 へ正規化するフォールバックをVMに実装downcast→toString→parse
    • 80/20ポリシー: 数値にパース可能なら比較継続、失敗時のみTypeError。

🆕 進捗2025-08-26 午前)

  • TypeErrorAnd/Or 経路再発なしを確認3スモーク緑: compare/and_or/and_or_truthy
  • ログ抑制の徹底: Runner/VMのデバッグ出力を既定で静音、環境変数でのみ有効化。
  • Phi正規化 Step1: previous_block によるPhi入力選択をVMに実装NYASH_VM_DEBUG_PHI=1)。
  • VM分割の骨組み: control_flow.rs/dispatch.rs/frame.rs 追加(今後段階移動)。
  • レガシー削除: src/mir/builder_old.rs, src/mir/builder.rs.backup, src/parser.rs.backup, src/instance.rs.backup, src/box_trait.rs.backup を削除。
  • objects.rs 分解 Step1: execute_new をヘルパ(三分割)へ抽出しスリム化(等価挙動)。

🎯 次の優先タスク(更新)

  1. copilot_issues.txtの確認
    • Phase 8.4: AST→MIR Lowering完全実装最優先
    • Phase 8.5: MIRダイエット35命令→20命令
    • Phase 8.6: VM性能改善0.9倍 → 2倍以上

1.5 VM実行経路の特定と修正最優先

  • runner.rs → VM::execute_module → execute_instruction → execute_binop の各段でデバッグログを追加し、BinOp(And/Or) がどこで分岐しているか特定。
  • バイナリ一致確認: strings によるシグネチャ(デバッグ文字列)含有の照合で実行バイナリを同定。
  • 代替経路の洗い出し: src/ 全体で execute_binop/And/Unsupported binary operation を再走査し、影響箇所を一掃。
  • 修正後、local_tests/and_or_vm.nyashfalse/true の出力を確認。
  • ルート確定: Compare経路はBuilder側のCast導線で安定。VM側は保険フォールバックを維持しつつ一時ログを抑制へ。 1.6 objects.rs 分解 Step2安全にファイル分割
  • objects_impl.rs を導入し、抽出済みヘルパを移動。本体は薄いラッパに。
  • 以降: objects/{fields.rs,methods.rs,ops.rs} への段階分解。

1.7 runner.rs 分離

  • init_bid_pluginsrunner/plugin_init.rs へ抽出。各モードを runner/modes/*.rs に。

1.8 VM分割の段階移動

  • ブロック遷移を control_flow.rs、フレーム状態を frame.rs に移し、dispatch.rs の導線を準備。
  1. MIR26命令対応

    • TypeOp/WeakRef/Barrierのプリンタ拡張
    • スナップショット整備extern_call/loop/boxcall/typeop_mixed 追加済)
    • vm-stats差分確認
  2. Builder適用拡大

    • 言語 is/as 導線の実装
    • 弱参照フィールドのWeakLoad/WeakNew対応
    • 関数スタイル isType/asType の早期lowering強化

🗺️ 計画の粒度(近々/中期/長期)

近々12週間

  • Loop SSA復帰: loop_api 小APIを活用し、Phi挿入・seal・predecessor更新を段階適用。簡易loweringを正しいSSAに置換。
  • Builder移行完了: builder.rsの機能をbuilder_modularized/*へ移し切り、両者の差分(命令フィールド名・効果)を完全一致。
  • TypeOp網羅: is/as/isType/asTypeの早期loweringを再点検、Optimizer診断未lowering検出を有効化し回帰を防止。
  • 軽量スナップショット: MIRダンプverboseに対する含有チェックを代表ケースTypeOp/extern_call/loop/await/boxcallへ拡張。

中期34週間

  • WeakRef/Barrier統合: loweringWeakNew/WeakLoad/Barrier導線を整理、統合命令フラグON/OFFでMIR差を固定化。Verifierに整合チェック追加。
  • MIR26整合化: Printer/Verifier/Optimizerの26命令前提をそろえ、効果の表記・検証を強化。
  • CLI分離テスト: ワークスペース分割 or lib/binaryテスト分離で、cargo test -p core のみで回る導線を確立CLI構成変更で止まらない
  • ResultBox移行: box_trait::ResultBox 参照を boxes::ResultBox へ一掃し、レガシー実装を段階的に削除。

長期Phase 8.48.6連動)

  • AST→MIR Lowering完全化8.4: すべての言語要素を新MIRへ安定lower。未対応分岐をゼロに。
  • MIRダイエット8.5: 命令の統一・簡素化TypeOp/WeakRef/Barrierの統合効果を活用し最小集合へ。
  • VM性能改善8.6: Hot-pathBoxCall/Array/Map高速化、And/OrのVM未実装の解消、BoxRef演算の抜けを補完。

Phase 10 着手ゲートCranelift前提条件

  • MIR26整合化完了Printer/Verifier/Optimizerが26命令で一致・効果表記統一
  • Loop SSA復帰Phi/Seal/Pred更新がVerifierで合格
  • TypeOp網羅is/as/isType/asTypeの早期loweringOptimizer診断ONで回帰ゼロ
  • 軽量スナップショット緑TypeOp/extern_call/loop/await/boxcall 代表ケース)
  • P2PBox再設計Phase 9.79完了・E2Eパス
  • CLI分離テストcargo test -p core)が安定実行

⚠️ トラブルートVM and/or 追跡用)

  • 症状: --backend vmAndexecute_binop の短絡パスを経由せず、execute_binary_op 汎用パスで Type error
  • 状況: MIR --dump-mir では bb0: %X = %A And %B を出力BuilderはOK
  • 差分検証: execute_instruction/execute_binop に挿入したデバッグ出力が未出力→実行経路の相違が濃厚。
  • 対応: 実行バイナリの署名チェックとコードパスの網羅的ログ追加でルート確定→修正。

🔧 再開ガイド(最短手順)

  • ログ抑制: 一時ログはそのままでもOK。静かにしたい場合は NYASH_VM_DEBUG_CMP=0 NYASH_VM_DEBUG_ANDOR=0 で実行。
  • 検証: 上記スモーク3本compare/and_or/and_or_truthytools/ci_check_golden.sh
  • 進める順: Phi正規化 → String/Bool re-export → VM分割設計 → スナップショット追加。

小タスク完了2025-08-25 深夜)

  • Verifier: Barrierの軽い文脈診断を追加NYASH_VERIFY_BARRIER_STRICT=1で有効)。
  • ResultBox移行TODOを追加docs/development/current/RESULTBOX_MIGRATION_TODO.md)。
  • VM: 旧box_trait::ResultBox扱いのデプリケーション警告を最小抑制(完全移行までの暫定)。

小タスク完了2025-08-26 早朝)

  • VM: as_bool() の拡張IntegerBox/ Void を真理値化)。
  • テスト: and_or_truthy_vm.nyash 追加。
  • 基本ボックス統一(第一弾): IntegerBox 実体の一本化re-export

▶ リファクタリング開始(控えめ)

  • 方針: 肥大化防止のためsrc/backend/vm.rsを2分割のみ実施。
    • vm_values.rs: execute_binary_op/execute_unary_op/execute_compare_op を移動。
    • vm_boxcall.rs: call_box_method を移動(call_unified_methodは現状のまま)。
  • 影響最小・挙動非変更で、可読性と責務分離を先行する。

🧭 リファクタリングゴールAI一目見て分かる導線

目的/原則

  • 明確責務: 各モジュールが1行で説明できる目的・責務を持つ
  • 入口統一: VM/MIRの読む順番が固定され、迷わない
  • ファイル肥大防止: 1000行超は段階分割まずVMホットパス
  • ドキュメント導線: quick-referenceで最短経路を提示
  • 振る舞い不変: すべてのゴールデン/CIが緑

マイルストーン(受入基準)

  • M1: VM導線完成達成
    • vm.rs → vm_instructions.rs → vm_values.rs / vm_boxcall.rs / vm_stats.rs / vm_phi.rs
    • code-mapdocs/quick-reference/code-map.mdで入口と責務を明記
    • 受入: build OK / golden 緑 / 実行変化なし
  • M2: モジュールヘッダ(着手)
    • Purpose/Responsibilities/Key APIs/Typical Callers を各VMモジュール先頭に追記
    • 受入: 各モジュール先頭4行程度の要約とcode-mapの整合
  • M3: 1000行級の導線整備設計メモ
    • interpreter/plugin_loader.rs: v2主導の導線明文化削除は後
    • interpreter/objects.rs: 可視性/フィールド/ライフサイクルの分割指針をTODO化
  • M4: レガシー移行(土台)
    • RESULTBOX_MIGRATION_TODOの維持、VMは新旧両対応のまま

実行順(小さく確実に)

  1. M2ヘッダ追加VM系
  2. M3 plugin_loader 導線の明文化(コメント/TODO/コードマップ)
  3. M3 objects.rs 分割設計メモ
  4. 用語の統一・code-map追従
  5. golden + 重要E2Eを確認

⚠️ MIRビルダー引き継ぎポイントChatGPT5さんへ

  • 状況: MIRビルダーのモジュール化完了Phase 1-8コミット済み
  • 問題: MIR命令構造の変更により、expressions.rsでエラー発生
    • Call命令: functionfunc, argumentsargs
    • ArrayAccess, ArrayLiteral, Awaitノードが削除?
    • effectsフィールドの有無が命令により異なる
    • TypeOpKindのインポートパスエラー
    • loop_builder.rsでのプライベートフィールドアクセス問題
  • 現在の対応:
    • builder_modularizedディレクトリに一時退避
    • 元のbuilder.rsでフルビルド可能な状態に復帰
    • ChatGPT5さんのMIR命令変更に合わせた調整が必要
  1. VMの既知の問題
    • 論理演算子and, orがBinOpとして未実装
    • エラー: Type error: Unsupported binary operation: And on Bool(true) and Bool(false)
    • インタープリターでは動作するがVMで動作しない
    • 新発見: BoxRef(IntegerBox) + BoxRef(IntegerBox)のような演算も未対応
      • execute_binary_opにBoxRef同士の演算ケースが不足

直近の完了

  1. VMモジュールのリファクタリング完了2025-08-25
    • execute_instruction関数を29個のハンドラーに分割
    • vm_instructions.rsモジュール作成487行
    • execute_instruction_old削除691行削減
    • vm.rs: 2075行→1382行33%削減)
  2. ドキュメント再編成の完了(構造刷新)
  3. VM×プラグインのE2E整備FileBox/Net
    • FileBox: open/write/read, copyFrom(handle)VM
    • Net: GET/POSTVM、404/500Ok(Response)、unreachableErr(ErrorBox)
  4. VM命令カウンタ時間計測のCLI化--vm-stats, --vm-stats-jsonとJSON出力対応
    • サンプル/スクリプト整備tools/run_vm_stats.sh、local_tests/vm_stats_*.nyash
  5. MIR if-merge 修正retがphi dstを返す Verifier強化mergeでのphi未使用検知、支配関係チェック導入
  6. VMの健全化分岐・比較・Result
    • Compare: Void/BoolのEq/Ne定義順序比較はTypeError
    • Branch条件: BoxRef(BoolBox)→boolBoxRef(VoidBox)→falseInteger≠0→true
    • ResultBox: 新旧両実装への動的ディスパッチ統一isOk/getValue/getError
  7. VMビルトイン強化Array/Map/Socket
    • ArrayBox/MapBox: 代表メソッドをVM統合ディスパッチで実装push/get/set/size等
    • SocketBox: acceptTimeout(ms)void/ recvTimeout(ms)(空文字)を追加
    • E2E追加: socket_timeout_server.nyash / socket_timeout_client.nyash
  8. E2E拡張Net/Socket
    • HTTP: 大ボディ取得クライアント local_tests/http_big_body_client.nyash
    • Socket: 反復タイムアウト検証 local_tests/socket_repeated_timeouts.nyash
    • インタープリタ: SocketBoxの acceptTimeout/recvTimeout を結線
  9. VM/MIRの健全化Builder/VM
    • Compare拡張: Float/Int-Float混在をサポートEq/Ne/Lt/Le/Gt/Ge
    • TypeOp(Check)最小意味論実装Integer/Float/Bool/String/Void/Box名
    • ArrayGet/ArraySetVM本実装ArrayBox.get/setへ橋渡し
    • Array/Mapをidentity扱いclone_or_shareがshareを選択
    • BoxCallにArrayBox fast-pathBoxRefからget/set直呼び
    • me参照の安定化fallback時に一度だけConstを発行しvariable_mapに保持
    • デバッグ: NYASH_VM_DEBUG_BOXCALL=1 でBoxCallの受け手/引数/経路/結果型を標準エラーに出力
  10. ドキュメント追加・更新
    • MIR→VMマッピング分岐条件の動的変換、Void/Bool比較
    • VM READMESocketBoxタイムアウト/E2E導線・HTTP Result整理
    • 26命令ダイエット: PoCフラグと進捗追記TypeOp/WeakRef/Barrier
  11. CI: plugins E2E ジョブLinuxを追加

📊 大規模ファイルのリファクタリング候補

  1. src/interpreter/objects.rs (1,272行) - オブジェクト処理の分割
  2. src/interpreter/plugin_loader.rs (1,217行) - v2があるので削除候補
  3. src/interpreter/expressions/calls.rs (1,016行) - 関数呼び出し処理の分割

🚧 次にやること(再開方針)

  1. MIR26 前進(短期)

    • プリンタ拡張: TypeOp/WeakRef/Barrier--mir-verbose に明示表示
    • スナップショット整備: 代表ケースで flag ON/OFF のMIR差分固定化
    • vm-stats差分: weak_field_poc.nyash 等で JSON 取得・比較(キー: TypeOp/WeakRef/Barrier
    • 旗: mir_typeop_pocTypeCheck/Cast→TypeOpmir_refbarrier_unify_pocWeak*/Barrier→統合
  2. Builder適用拡大短期〜中期

    • 言語 is/as 導線(最小でも擬似ノード)→ emit_type_check/emit_cast へ配線
    • 弱参照: 既存の RefGet/RefSet パスは弱フィールドで WeakLoad/WeakNewBarrierflag ONで統合命令
    • 関数スタイル isType/asType の早期loweringを強化Literal("T")new StringBox("T") を確実に検出)
    • print(isType(...)) の未定義SSA回避print直前で必ず TypeOp のdstを生成

補足: 近々/中期で並行対応する項目

  • Loop SSA復帰Phi挿入/Seal/Pred更新の段階適用、簡易loweringの置換
  • Builder移行完了builder.rsbuilder_modularized/*、命令フィールド名・効果の完全一致)
  • CLI分離テスト導線cargo test -p core 単独で回る構成)
  • ResultBox移行box_trait::ResultBoxboxes::ResultBox、レガシー段階削除)
  1. VM/Verifierの補強中期

    • TypeOp(Cast) の数値キャストInt/Float安全化、誤用時TypeError整備
    • Verifierに26命令整合Barrier位置、WeakRef整合、支配関係チェックを追加
  2. VM×プラグインE2Eの維持短期

    • HTTP/Socketの回帰確認Void防御・遅延サーバ軽量化は済
    • 必要に応じて VM_README.md にTips追記
  3. BoxCall高速化性能段階

    • --vm-stats ホットパス特定後、Fast-path/キャッシュ適用

🐛 既知の問題(要フォロー)

  • 関数スタイル isType(value, "Integer") が一部ケースで TypeOp にloweringされず、print %X が未定義参照になる事象
    • 現状: asTypetypeop cast に変換されるが、isType が欠落するケースあり
    • 仮対処: Interpreterに is/isType/as/asType のフォールバックを実装済(実行エラー回避)
    • 恒久対処(次回対応):
      • Builderの早期loweringをFunctionCall分岐で強化Literal/StringBox両対応、print(...) 内でも確実にdst生成
      • Optimizerの安全ネットBoxCall/Call→TypeOpisType パターンでも確実に発火させる(テーブル駆動の判定)

⏸️ セッション再開メモ(次にやること)

  • Builder: extract_string_literalStringBox対応は導入済 → FunctionCall 早期loweringの再検証print(isType(...)) 直下)
  • Optimizer: Call 形式(関数呼び出し)でも isType/asType を検出して TypeOp(Check/Cast) に置換する安全ネットの強化とテスト
  • MIRダンプの確認local_tests/typeop_is_as_func_poc.nyashtypeop check/cast が両方出ることを確認
  • スナップショット化:typeop_is_as_*_poc.nyash のダンプを固定し回帰検出

▶ 補助コマンド(検証系)

# リビルド
cargo build --release -j32

# 関数スタイルのMIRダンプ確認isType/asType
./target/release/nyash --dump-mir --mir-verbose local_tests/typeop_is_as_func_poc.nyash | sed -n '1,200p'

# メソッドスタイルのMIRダンプ確認is/as
./target/release/nyash --dump-mir --mir-verbose local_tests/typeop_is_as_poc.nyash | sed -n '1,200p'

🆕 開発時の可視化・診断(最小追加)

  • --mir-verbose-effects: MIRダンプ行末に効果カテゴリを表示pure|readonly|side
    • 例: nyash --dump-mir --mir-verbose --mir-verbose-effects local_tests/typeop_is_as_func_poc.nyash
  • NYASH_OPT_DIAG_FAIL=1: Optimizer診断で未loweringis|isType|as|asType検知時にエラー終了CI向け
    • 例: NYASH_OPT_DIAG_FAIL=1 nyash --dump-mir --mir-verbose local_tests/typeop_diag_fail.nyash
  • Builder生MIRスナップショット: tools/snapshot_mir.sh <input.nyash> [output.txt]
    • 例: tools/snapshot_mir.sh local_tests/typeop_is_as_func_poc.nyash docs/status/golden/typeop_is_as_func_poc.mir.txt
  • ゴールデン比較(ローカル/CI: tools/ci_check_golden.sh代表2ケースを比較
    • 例: ./tools/ci_check_golden.sh(差分があれば非ゼロ終了)

補足: ASTの形状確認は --dump-ast を使用。

代表スナップショット対象(拡張)

  • TypeOp系: typeop_is_as_poc.nyash, typeop_is_as_func_poc.nyash
  • extern_call: http_get_*.nyash, filebox_copy_from_handle.nyash
  • loop/await: loop_phi_seal_poc.nyash, await_http_timeout_poc.nyash
  • boxcall: array_map_fastpath_poc.nyash, boxcall_identity_share_poc.nyash

▶ 実行コマンド例

計測実行:

tools/run_vm_stats.sh local_tests/vm_stats_http_ok.nyash vm_stats_ok.json
tools/run_vm_stats.sh local_tests/vm_stats_http_err.nyash vm_stats_err.json
tools/run_vm_stats.sh local_tests/vm_stats_http_404.nyash vm_stats_404.json
tools/run_vm_stats.sh local_tests/vm_stats_http_500.nyash vm_stats_500.json

VM×プラグインE2E:

cargo test -q --features plugins e2e_interpreter_plugin_filebox_close_void
cargo test -q --features plugins e2e_vm_plugin_filebox_close_void

MIR26 PoC弱参照・Barrier統合:

# 弱フィールドPoCflag OFF: WeakNew/WeakLoad/BarrierRead/Write
NYASH_VM_STATS=1 NYASH_VM_STATS_JSON=1 ./target/release/nyash --backend vm --vm-stats --vm-stats-json local_tests/weak_field_poc.nyash > vm_stats_weak_default.json

# flag ON: WeakRef/Barrier 統合
cargo build --release --features mir_refbarrier_unify_poc -q
NYASH_VM_STATS=1 NYASH_VM_STATS_JSON=1 ./target/release/nyash --backend vm --vm-stats --vm-stats-json local_tests/weak_field_poc.nyash > vm_stats_weak_unified.json

MIRダンププリンタ拡張後の確認:

./target/release/nyash --dump-mir --mir-verbose local_tests/weak_field_poc.nyash | sed -n '1,200p'

MIRダンプ/検証:

nyash --dump-mir --mir-verbose examples/plugin_box_sample.nyash
nyash --verify examples/plugin_box_sample.nyash

🔭 26命令ターゲット合意ドラフト

  • コア: Const / Copy / Load / Store / BinOp / UnaryOp / Compare / Jump / Branch / Phi / Return / Call / BoxCall / NewBox / ArrayGet / ArraySet / RefNew / RefGet / RefSet / Await / Print / ExternCall(最小) / TypeOp(=TypeCheck/Cast統合) / WeakRef(=WeakNew/WeakLoad統合) / Barrier(=Read/Write統合)
  • メタ降格: Debug / Nop / Safepointビルドモードで制御

最終更新: 2025年8月25日MIR26整合確認・VM and/or実装・Loop補強・CLI分離テスト導線/ResultBox移行TODO追加スナップショット最小運用

🔁 再起動後の再開手順(ショート)

# 1) ビルド
cargo build --release -j32

# 2) plugins E2ELinux
cargo test --features plugins -q -- --nocapture

# 3) VM Stats 代表値の再取得(任意)
tools/run_vm_stats.sh local_tests/vm_stats_http_ok.nyash vm_stats_ok.json
tools/run_vm_stats.sh local_tests/vm_stats_http_err.nyash vm_stats_err.json

# 4) SocketBox タイムアウト確認(任意)
./target/release/nyash local_tests/socket_timeout_server.nyash
./target/release/nyash local_tests/socket_timeout_client.nyash

# 5) 反復タイムアウト確認(任意)
./target/release/nyash local_tests/socket_repeated_timeouts.nyash

# 6) HTTP 大ボディ確認(任意)
./target/release/nyash local_tests/http_big_body_client.nyash

# 7) VM BoxCall デバッグ(任意)
NYASH_VM_DEBUG_BOXCALL=1 ./target/release/nyash --backend vm local_tests/test_vm_array_getset.nyash
  • MIR26 整合候補1確認:
    • Printer: --mir-verbose-effectspure|readonly|side 表記と TypeOp/WeakRef/Barrier/ExternCall の表示が整合。
    • Verifier: SSA/支配/CFG/merge-phi に加え WeakRef/Barrier の最小検証Strict Barrier診断を実装環境変数でON
    • Optimizer: 未lowering検知is/as/isType/asTypeをBoxCall/Call両経路で検出、NYASH_OPT_DIAG_FAIL=1 と連携。
    • 代表スナップショット: extern_call/loop/boxcall/typeop_mixed をCIに追加、全件緑。
    • 注: WeakRef/Barrier の“統合”はPoCフラグで切替可能レガシー命令も支援—MIR26はドキュメントの正典、実装は互換を維持。