diff --git a/docs/development/roadmap/phases/phase-15/recommended-sequence.txt b/docs/development/roadmap/phases/phase-15/recommended-sequence.txt new file mode 100644 index 00000000..3950c6cb --- /dev/null +++ b/docs/development/roadmap/phases/phase-15/recommended-sequence.txt @@ -0,0 +1,123 @@ +=============================================================================== +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 ' を受理(--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(リテラル・単純四則)、DCE(unreachable 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/スモークで常時検証する。 + diff --git a/nyash-lang-github b/nyash-lang-github new file mode 160000 index 00000000..78a1fe81 --- /dev/null +++ b/nyash-lang-github @@ -0,0 +1 @@ +Subproject commit 78a1fe8179b63b86723ad5638a24e9ee659b924d diff --git a/nyash-lang-papers b/nyash-lang-papers new file mode 160000 index 00000000..8aa82aea --- /dev/null +++ b/nyash-lang-papers @@ -0,0 +1 @@ +Subproject commit 8aa82aea49fb1fb50435a349c9800d29f0163065