Fixed infinite loop issue in VM by addressing phi node caching problem. The phi node was caching the initial value and returning it for all subsequent iterations, preventing loop variable updates. Changes: - Created vm_phi.rs module to separate loop execution logic (similar to mir/loop_builder.rs) - Disabled phi node caching to ensure correct value selection each iteration - Added LoopExecutor to track block transitions and handle phi nodes properly - Fixed VM to correctly track previous_block for phi input selection The VM now correctly executes SSA-form loops with proper variable updates: - Loop counter increments correctly - Phi nodes select the right input based on control flow - Test case now completes successfully (i=1,2,3,4) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
8.3 KiB
8.3 KiB
🎯 現在のタスク (2025-08-18 更新)
✅ SSA形式ループ実装 - 完了! ✅
🎉 最終完了報告(2025-08-18)
- ✅ MIRビルダーでphi nodeを正しく生成するループ実装完了
- ✅ sealed/unsealedブロック概念を導入
- ✅ ループビルダーを別ファイル(loop_builder.rs)に分離
- ✅ VMのphi命令実装を完全修正!
- 問題:Phi nodeのキャッシュが古い値を返していた
- 解決:vm_phi.rsモジュールを作成し、キャッシュを無効化
🎊 修正内容と成果
-
根本原因
- Phi nodeが初回実行時の値をキャッシュし、2回目以降は古い値を返していた
- ループ変数が更新されず、無限ループが発生
-
解決策
- vm_phi.rsモジュールでループ実行ロジックを分離(MIRのloop_builder.rsと同様の設計)
- Phi nodeのキャッシュを無効化し、毎回正しい値を計算
- previous_blockの追跡とデバッグログで問題を特定
-
動作確認
Before loop: i = 1 In loop: i = 1 After increment: i = 2 In loop: i = 2 After increment: i = 3 In loop: i = 3 After increment: i = 4 After loop: i = 4完璧に動作!SSA形式のループがVMで正しく実行されています。
🎊 Phase 9.75g-0 BID-FFI Plugin System - 完全完了! 🎊
✅ 最終完了項目(2025-08-19)
- ✅ plugin-tester型情報検証機能(nyash.toml読み込み、型チェック)
- ✅ plugin-tester重複メソッド名チェック(Nyash関数オーバーロード不採用対応)
- ✅ Phase 9.75g-0完了ドキュメント作成(200行包括的開発者ガイド)
- ✅ セグフォルト修正(HostVtable生存期間問題解決)
- ✅ 型情報管理システム実装(nyash.toml外部化、ハードコード完全削除)
🚀 革命的成果
NyashがプラグインでBox型を動的拡張可能に!
// これが現実になった!
local file = new FileBox() // プラグイン提供
local db = new PostgreSQLBox() // 将来: プラグイン提供
local gpu = new CudaBox() // 将来: プラグイン提供
✅ Phase 8.6 VM性能改善 - 完了!
🎉 VM性能改善 - 大成功報告!
- 従来: VMがインタープリターより0.9倍遅い(性能回帰)
- 🚀 最終達成: VM 50.94倍高速化達成! (2025-08-20測定)
- 期間: 1日で完了(2025-08-19)
- 担当: Copilot主導(GitHub Issue #112, PR #113)
📊 技術詳細と成果
- MIR仕様: 26命令(ExternCall含む)で完全確定
- VM実装: 26命令MIR → バイトコード実行
- 改善内容:
- Phase 1: デバッグ出力削除 → 18.84倍高速化
- Phase 3: メモリ最適化 → 22.80倍高速化
- 最終結果: 50.94倍高速化
- ベンチマーク結果 (2025-08-20):
- インタープリター: 78.66ms (1,271 ops/sec)
- VM: 1.54ms (64,761 ops/sec)
- 性能向上率: 50.94倍 🚀
- 詳細:
docs/予定/native-plan/issues/phase_8_6_vm_performance_improvement.md
🚀 Phase 9.78: LLVM PoC → Phase 9.8: BID Registry移行決定!
戦略的転換(2025-08-21)
- ✅ LLVM PoC基盤完成(MIR生成修正、モック実装)
- ✅ Phase 9.8 BIDレジストリへの移行決定
- ✅ 重要な発見:nyash.tomlが既に完璧な型情報を持っている!
- 🔄 新方針:nyash.tomlを拡張してBID機能を統合
技術的成果
- モックLLVM統合:
--backend llvmオプション動作確認 - アーキテクチャ実証: MIR → LLVM変換パス確立
- CI/CD対応: 外部依存なしでテスト可能
革命的Windows戦略
- 1回のIR生成で全OS対応: Bitcodeキャッシュ戦略
- PAL設計: Platform Abstraction Layer構想
- 将来: APE単一バイナリ: 小規模ツール向け
📦 Phase 9.8: BID Registry + Code Generation - 開始!
革命的発見:nyash.toml活用戦略(2025-08-21)
既存のnyash.tomlに必要な型情報がほぼ完備されていることが判明!
現在のnyash.toml
[plugins.FileBox.methods]
read = { args = [] }
write = { args = [{ from = "string", to = "bytes" }] }
open = { args = [
{ name = "path", from = "string", to = "string" },
{ name = "mode", from = "string", to = "string" }
] }
拡張案(Phase 9.8 + 9.9統合)
[plugins.FileBox.methods]
read = {
args = [],
returns = "string",
permissions = ["storage:read"],
effects = ["io"],
description = "Read file contents"
}
実装方針
- nyash.tomlを段階的に拡張(後方互換維持)
- 拡張されたnyash.tomlから各バックエンド用コード生成
- BID YAMLは大規模プラグイン用のオプションとして提供
🌟 重要な戦略的決定
- BID実装方針: nyash.toml拡張を優先(新規YAML不要)
- Phase 9.8 + 9.9統合: FileBoxがVMで権限制御付きで動作することをゴールに
- 優先順位: VM性能(完了) → BIDレジストリ → 権限モデル → LLVM本格実装
最終目標
- インタープリター併用戦略: 開発時(即時実行)+ 本番時(AOT高性能)
- 4バックエンド対応: Interpreter/VM/WASM/AOT
- プラグインエコシステム: 無限拡張可能なBox型システム
📚 参考資料
BID-FFI Plugin System完全ドキュメント
- Phase 9.75g-0完了ドキュメント - 包括的開発者ガイド
- ffi-abi-specification.md - BID-1技術仕様
- plugin-tester使用例 - プラグイン診断ツール
VM性能改善関連
- phase_8_6_vm_performance_improvement.md - 詳細技術分析
- copilot_issues.txt - 全体開発計画
🔧 現在進行中:ビルトインBoxプラグイン化プロジェクト(2025-08-18開始)
目的
- ビルド時間短縮: 3分 → 30秒以下
- バイナリサイズ削減: 最小構成で500KB以下
- 保守性向上: 各プラグイン独立開発
対象Box(13種類)
Phase 1: ネットワーク系(HttpBox系、SocketBox)
Phase 2: GUI系(EguiBox、Canvas系、Web系)
Phase 3: 特殊用途系(AudioBox、QRBox、StreamBox等)
進捗状況
- ✅ プラグイン移行依頼書作成(
docs/plugin-migration-request.md) - ✅ CopilotのBID変換コード抽出(
src/bid-converter-copilot/) - ✅ CopilotのBIDコード生成機能抽出(
src/bid-codegen-from-copilot/) - 🔄 HttpBoxプラグイン化作業をCopilotに依頼中
📋 今日の重要決定事項(2025年8月18日)
1. CopilotのPR管理戦略
- ✅ 大規模変更(1,735行)を含むPR #117をrevert
- ✅ 必要な新規ファイルのみ選択的に抽出・保存
- ✅ cli.rs/runner.rsへの大幅変更は取り込まない方針
2. Copilot成果物の保存
- BID変換部分:
src/bid-converter-copilot/(TLV、型変換) - コード生成部分:
src/bid-codegen-from-copilot/(各言語向け生成) - 活用方針: 将来的にnyash2.toml実装時に参考資料として使用
3. 開発優先順位の明確化
1. 🔄 ビルトインBoxプラグイン化(HttpBox系から開始)
2. → Phase 9.8 BIDレジストリ(nyash.toml拡張方式)
3. → Phase 9.9 権限モデル(FileBoxで実証)
4. → Phase 10 LLVM本格実装(将来検討)
4. 選択的pull戦略の確立
- 原則: 必要な機能だけを取り込む
- 判断基準: 現在の目標との関連性、複雑性、保守性
- 実践: 新規ファイルは別フォルダに保存、既存ファイルの大幅変更は慎重に
最終更新: 2025年8月18日
次回レビュー: HttpBoxプラグイン完成時
開発状況: ビルトインBoxプラグイン化進行中
🎯 次のアクション
- HttpBoxプラグイン化の完成待ち(Copilot作業中)
- plugin-testerでの動作確認
- 次のプラグイン化対象(EguiBox等)の準備