pyvm: split op handlers into ops_core/ops_box/ops_ctrl; add ops_flow + intrinsic; delegate vm.py without behavior change

net-plugin: modularize constants (consts.rs) and sockets (sockets.rs); remove legacy commented socket code; fix unused imports
mir: move instruction unit tests to tests/mir_instruction_unit.rs (file lean-up); no semantic changes
runner/pyvm: ensure using pre-strip; misc docs updates

Build: cargo build ok; legacy cfg warnings remain as before
This commit is contained in:
Selfhosting Dev
2025-09-21 08:53:00 +09:00
parent ee17cfd979
commit c8063c9e41
247 changed files with 10187 additions and 23124 deletions

View File

@ -0,0 +1,59 @@
# MiniVM 構築ロードマップSelfHosting 足場)
Status: active (Stage B → C 準備)
目的
- Nyashスクリプト製の極小VMMiniVMを段階的に整備し、PyVM依存を徐々に薄める。
- まずは「JSON v0 → 実行print/if/loopの最小」の芯を安定化し、自己ホストの足場にする。
原則
- 小さく進める段階ゲート、既定OFF
- 既存Runner/マクロ/CIへの影響を最小化導線はenvで明示
- まずは正しさ・可読性を優先。性能は後段で最適化。
Stages概要
- Stage A完了
- 文字列スキャンで整数抽出→print、ifリテラル条件の最小到達。
- サンプル: `apps/selfhost-vm/mini_vm*.nyash`
- スモーク: `tools/test/smoke/selfhost/mini_vm_*`
- Stage B進行中
- stdinローダ`NYASH_MINIVM_READ_STDIN=1`[実装済]
- JSON v0 ローダの最小強化Print(Literal/FunctionCall)、BinaryOp("+")の最小)[実装中]
- Stage C
- 最小命令の芯const / compare / branch / retloopの芯に直結
- binop(int+int) を本加算に変更(現状は簡易出力)
- if/loop の代表ケースを MiniVM で実行PyVM と出力一致)
- Stage D整備
- 解析の健全化:最小トークナイザ/カーソル Box 抽出、JSON 走査の責務分離
- 観測/安全:`NYASH_MINIVM_DEBUG=1`、最大ステップ、入力検証
受け入れ基準
- A: print/ifサンプルのスモーク常時緑
- B: stdin/argv経由のJSON供給で Print(Literal/FunctionCall)、BinaryOp("+") が正しく動作
- C: if/loop の簡易ケースが MiniVM で実行可能PyVMと出力一致
- D: 代表スモークが既定で安定デバッグON時のみ追加出力
実行・導線
- PyVM経由既定: `NYASH_VM_USE_PY=1` で Runner が MIR(JSON)→PyVM へ委譲
- MiniVM入力: `NYASH_MINIVM_READ_STDIN=1` で標準入力を `NYASH_SCRIPT_ARGS_JSON` に注入
- サンプル実行: `bash tools/test/smoke/selfhost/mini_vm_stdin_loader_smoke.sh`
関連
- 現在の短期タスクと進捗: `CURRENT_TASK.md` の「MiniVM 構築ロードマップ(整理)」
---
開発順序(迷わないための具体ステップ)
Now今すぐ
- compare の厳密化(<, == を先に完成 → その後 <=, >, >=, != を追加)
- binop(int+int) を本加算に修正(文字列→整数化→加算→文字列化)
- スモーク追加各1本ずつbinop / compare / ifMiniVM 版)
Next次の小粒
- 最小トークナイザ/カーソル Box 抽出index/substring を段階置換)
- FunctionCall の引数2個の最小対応echo(a,b)→連結)とスモーク
Later後で一気に
- loop の芯branch/jump/ret を活用)と代表スモーク
- ランナーの薄いFacadePyVM/Interpreter 切替を関数で吸収。巨大Trait導入は後回し