Files
hakorune/docs/development/roadmap/phases/phase-15/recommended-sequence.txt
2025-09-06 11:00:15 +09:00

124 lines
6.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

===============================================================================
Phase 15 推奨進行順JIT優先・自己ホスティング最小
更新日: 2025-09-05
===============================================================================
方針(原則)
- JITオンリーCraneliftで前進。LLVM/AOT・lld系は後段にスライド。
- 最小自己ホスト体験を早期に成立 → ドキュメント/スモーク/CIを先に固める。
- using名前空間はゲート付きで段階導入。NyModulesとny_pluginsの基盤を強化。
- tmux + codex-async を使い、常時2本並走で小粒に積み上げる。
===============================================================================
推奨シーケンス(概要→実施要点→完了基準)
===============================================================================
1) 基盤整備NyModules / ny_plugins / Windows正規化
- 要点:
- NyModules 共有レジストリ導入: env.modules.set/getまたは ModulesBox
- ny_plugins のパス→名前空間導出: ルート相対、"/"→".", 拡張子 .nyash 省略、[^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) 最小コンパイラ経路JIT
- 要点:
- パーサ/レクサのサブセット: ident/literals/let/call/return/if/block
- Nyash から呼べる MIR ビルダ(小さなサブセット)
- VM/JIT ブリッジを通して apps/selfhost-minimal が走る
- スモーク/CI:
- tools/jit_smoke.sh, tools/selfhost_vm_smoke.sh
- 完了基準:
- ./target/release/nyash --backend vm apps/selfhost-minimal/main.nyash が安定実行し、CIでJITスモーク合格。
3) usingゲート付き設計・実装15.2/15.3
- 要点:
- パーサフック: 'using <ns>' を受理(--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 経路が動作し、未解決時の診断・キャッシュ挙動がテストで担保。
4) nyash.link ミニマルリゾルバ15.4
- 要点:
- ファイル/相対解決 → 名前空間への写像、検索パス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.nyash
- スモーク:
- 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パス/名前空間: "\\"→"/" 正規化 → ルール適用(/→., .nyash除去, sanitize
備考
- 本シーケンスは docs/development/roadmap/phases/phase-15/self-hosting-plan.txt を尊重しつつ、
JIT最小体験を優先させるため順序を最適化LLVM/lld と YAML自動生成は後段へスライド
進捗に応じて適宜見直し、CI/スモークで常時検証する。