Files
hakorune/docs/archive/phases/phase-15/planning/sequence.md
nyash-codex 8750186e55 chore: Phase 26-H セッション完了 - 全ドキュメント更新
Phase 26-H 完了内容:
 JoinIR 型定義実装(src/mir/join_ir.rs)
 MIR → JoinIR 自動変換実装(lower_min_loop_to_joinir)
 自動変換テスト実装(mir_joinir_min_auto_lowering)
 PHI/Loop箱 → JoinIR 移行対応表追加(loopform_ssot.md)

ドキュメント更新:
- Phase 27 JoinIR タスク計画追加
- Phase 26-H タスク完了記録
- 各種 README 更新(進捗反映)
- CURRENT_TASK.md 更新

コミット統計: $(git status --short | wc -l) files changed

次のステップ: Phase 27 一般化 MIR → JoinIR 変換
2025-11-23 05:53:27 +09:00

6.6 KiB
Raw Blame History

Phase 15 推奨進行順llvmlite+PyVM 優先・自己ホスティング最小)

更新日: 2025-09-05

方針(原則)

  • JIT/Cranelift は停止。LLVMllvmliteと PyVM の2経路で前進。
  • 最小自己ホスト体験を早期に成立 → ドキュメント/スモーク/CIを先に固める。
  • using名前空間はゲート付きで段階導入。NyModulesとny_pluginsの基盤を強化。
  • tmux + codex-async を使い、常時2本並走で小粒に積み上げる。

推奨シーケンス(概要→実施要点→完了基準)

1) 基盤整備NyModules / ny_plugins / Windows正規化

要点:

  • NyModules 共有レジストリ導入: env.modules.set/getまたは ModulesBox
  • ny_plugins のパス→名前空間導出: ルート相対、"/"→".", 拡張子 .hako 省略、[^a-zA-Z0-9_.]→"_"
  • Windowsパス: "\"→"/" 正規化後に上記規則を適用
  • 予約衝突: nyashstd.* の登録を明示拒否しログ出力

スモーク/CI:

  • tools/modules_smoke.sh, tools/modules_winpath_smoke.sh

完了基準:

  • env.modules.get("acme.logger") などが取得可能、LIST_ONLY/Fail-continue維持、予約拒否ログが出る。

2) 最小VMPyVM

要点:

  • MIR(JSON) を Python VMPyVMで実行。最小命令 + 最小 boxcallConsole/File/Path/String
  • ランナー統合(NYASH_VM_USE_PY=1)→ 代表スモークが llvmlite と一致

スモーク/CI:

  • tools/compare_harness_on_off.shハーネス、compare_vm_vs_harness.shPyVM vs llvmlite

完了基準:

  • esc_dirname_smoke / dep_tree_min_string が PyVM と llvmlite で一致。

【Status 20250914】完了A6 受入)。

3) usingゲート付き設計・実装15.2/15.3

要点:

  • パーサフック: 'using ' を受理(--enable-using / NYASH_ENABLE_USING=1
  • リゾルバskeleton: resolve(ns) → NyModules を優先。外部/パッケージは TODO として設計のみ。
  • 実行時フック: 未解決時に提案を含む診断。セッションキャッシュを導入ny_plugins再読込で無効化
  • using alias: 'using a.b as x' を設計→段階導入。

スモーク/CI:

  • jit_smoke に using ケースとキャッシュケースを追加。

完了基準:

  • フラグONで using 経路が動作し、未解決時の診断・キャッシュ挙動がテストで担保。

【Next】Ny パーサMVPと並走で段階導入フラグ: --enable-using/NYASH_ENABLE_USING=1)。

3.5) Nyash パーサMVPサブセット

要点:

  • ステージ1: Ny→JSON v0 パイプ(最小表現)。
  • ステージ2: 文/式のサブセット拡張。
  • ステージ3: Ny AST→MIR JSON 直接降下llvmlite/PyVMへ

スモーク/CI:

  • tools/ny_roundtrip_smoke.sh / tools/ny_parser_bridge_smoke.sh
  • tools/parity.sh --lhs pyvm --rhs llvmlite <smoke.hako>Nyパーサ経路ON

完了基準:

  • esc_dirname_smoke / dep_tree_min_string が Ny パーサ経路でも PyVM/llvmlite と一致stdout/exit

要点:

  • ファイル/相対解決 → 名前空間への写像、検索パスnyash.toml と環境、Windows正規化
  • 未解決時は候補提示、NyModules へのフォールバック
  • using alias + 診断を仕上げる

スモーク/CI:

  • end-to-end 例apps/とJITスモークの拡充

完了基準:

  • 小規模プロジェクトで using + nyash.link の基本導線がJITでE2E通る。

5) パフォーマンス守りMIRマイクロ最適化 + 回帰ゲート)

要点:

  • const-foldリテラル・単純四則、DCEunreachable return/blocksをスコープ限定で有効化
  • 回帰時は NYASH_CLI_VERBOSE=1 で診断を落とす

スモーク/CI:

  • jit_smoke に閾値付きケースを追加、CI optional stage で監視

完了基準:

  • 主要ケースで回帰検出が機能し、JITパリティが維持される。

6) Boxes 高レベル移植15.5 開始)

要点:

  • StringBox → ArrayBox の順で表層メソッドをNyashへ移植NyRTは最小プリミティブ維持
  • MapBox は次段で検討。ABI/churnを避けるため段階導入

スモーク/CI:

  • 文字列/配列操作のJITスモークを追加

完了基準:

  • 代表的な文字列/配列APIがNyash実装で安定動作し、CI常時緑。

7) インタープリターコアの段階移植15.5/15.6

要点:

  • MIR実行ループを段階的にNyash化動的ディスパッチで13命令処理
  • ブートストラップ: c0(Rust) → c1(Nyash) → c1'(自己再コンパイル)

検証:

  • パリティテストtrace_hash 等)とスモークを追加

完了基準:

  • 自己再コンパイルループが成立し、差分トレースが安定。

8) YAML 自動生成15.1 を後段にスライドして導入)

要点:

  • boxes.yaml / externs.yaml / semantics.yaml を定義し、build.rs でコード自動生成
  • まず externs/boxes の一部から段階導入 → 重複削減を早期に回収

完了基準:

  • 重複コードが実測で大幅削減1〜2万行級、CI・ドキュメントに反映。

9) クローズアウト(各小節の都度)

  • README.ja.md / AGENTS.md / docs のHOWTO・旗一覧・スモーク手順を常に最新化
  • ツール類索引: tools/jit_smoke.sh, selfhost_vm_smoke.sh, modules_smoke.sh, modules_winpath_smoke.sh
  • CIトグル整備: LLVM系は無効化、JIT--features cranelift-jitを標準経路に

クイックコマンドJITオンリー

# ビルド
cargo build --release --features cranelift-jit

# 実行
./target/release/nyash --backend vm apps/selfhost-minimal/main.hako

# スモーク
./tools/jit_smoke.sh
./tools/selfhost_vm_smoke.sh
./tools/modules_smoke.sh ; ./tools/modules_winpath_smoke.sh

フラグ(抜粋)

  • --load-ny-plugins / NYASH_LOAD_NY_PLUGINS=1
  • --enable-using / NYASH_ENABLE_USING=1
  • NYASH_CLI_VERBOSE=1(診断強化)

運用Codex async / tmux

  • 2並走・重複回避: CODEX_MAX_CONCURRENT=2 CODEX_DEDUP=1 CODEX_ASYNC_DETACH=1
  • 監視: pgrep -af 'codex .* exec' / tail -f ~/.codex-async-work/logs/codex-*.log
  • Windowsパス/名前空間: "\"→"/" 正規化 → ルール適用(/→., .hako除去, sanitize

備考

本シーケンスは docs/private/roadmap2/phases/phase-15/self-hosting-plan.txt を尊重しつつ、JIT最小体験を優先させるため順序を最適化LLVM/lld と YAML自動生成は後段へスライド。進捗に応じて適宜見直し、CI/スモークで常時検証する。