Files
hakorune/CURRENT_TASK.md
Tomoaki a2b89fae7e phase15: update CLAUDE.md and sync with current progress
- Update phase indicator to Phase 15 (Self-Hosting)
- Update documentation links to Phase 15 resources
- Reflect completion of R1-R5 tasks and ongoing work
- Fix CURRENT_TASK.md location to root directory

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-05 13:29:17 +09:00

154 lines
9.8 KiB
Markdown
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.

# CURRENT TASK (Compact) — Phase 15 / Self-HostingNy→MIR→MIR-Interp→VM 先行)
このドキュメントは「いま何をすれば良いか」を最小で共有するためのコンパクト版です。詳細は git 履歴と `docs/`phase-15を参照してください。
— 最終更新: 20250905 (R1R5 反映)
■ 進捗サマリ
- Phase 12 クローズアウト完了。言語糖衣12.7-B/P0と VM 分割は反映済み。
- Phase 15Self-Hosting: Cranelift AOTへフォーカス移行。
- 設計/仕様ドキュメントとスモーク雛形を追加済み。
- 設計: `docs/backend-cranelift-aot-design.md`
- API案: `docs/interfaces/cranelift-aot-box.md`
- LinkerBox: `docs/interfaces/linker-box.md`
- スモーク仕様: `docs/tests/aot_smoke_cranelift.md`
- 雛形スクリプト: `tools/aot_smoke_cranelift.sh`, `tools/aot_smoke_cranelift.ps1`
- README にセルフホスト到達の道筋を明記C ABI を Box 化)。
■ 現在のフォーカス(優先順)
1) Ny から `nyash.toml` を読む最小ユーティリティny-config
- FileBox + TOMLBox で `nyash.toml``env`/`tasks`/`plugins`/`box_types` を取得する Ny スクリプトapps/std/ny-config.nyash
2) Ny スクリプトプラグインの列挙・読み込み方針
- `nyash.toml``[ny_plugins]` を追加純Nyashのプラグイン列挙。Runner にオプトイン・フック(`NYASH_LOAD_NY_PLUGINS=1`/`--load-ny-plugins`)。
3) 直結ブリッジ(実験)の段階導入
- `--parser ny`/`NYASH_USE_NY_PARSER=1` で v0 を直結実行JSONはデバッグダンプへ縮退。整合/スモーク拡充。
4) AOT P2 継続
- CraneliftAotBox/LinkerBox のスタブから RUN スモークまでの仕上げと計測。
■ ブランチ/構成Phase 15
- 実装ブランチ: `phase-15/self-host-ny-mir`
- 既存 Workspace は維持(`crates/*`)。
- 方針: crates 側は変更せず「Nyash スクリプト + nyash.exe」だけで実装・運用Windows優先
- 例: `C:\git\nyash-project\nyash_self\nyash` 直下で `target\release\nyash` 実行。
- Nyash 製パーサは `apps/ny-parser-nyash/`Nyashコードとして配置最初は最小サブセット
- MIR 解釈層は既存 `backend/mir_interpreter.rs``runner/modes/mir_interpreter.rs` を拡充。
- AOT 関連の雛形は `src/backend/cranelift/` に維持feature gate: `cranelift-aot`)。
■ 直後に回すタスク2本運用
- E) R4 finalize: Interpreter 実行前の BID v2 初期化の同期化FileBox/TOMLBox 安定化)
- 目的: `apps/std/ny-config.nyash` の初動「Unknown Box type」解消
- 内容: init 完了→Interpreter 構築の順序固定、最小スモーク追加
- F) AOT P2(step2): emit→link→run の計測雛形
- 目的: .o→実行→サイズ/時間ログを `tools/aot_smoke_cranelift.{sh,ps1}` に反映
■ 予定R5 拡張: Ny Plugins → Namespace
- Phase A最小: 共有レジストリ `NyModules` を追加し、`env.modules.set/get` で exports を登録/取得。
- `[ny_plugins]` は戻り値Map/StaticBoxを「ファイルパス→名前空間」に変換して登録。
- 名前空間導出: ルート相対・区切りは `.`、拡張子除去・無効文字は `_`。予約 `nyashstd.*` 等は拒否。
- Phase B範囲: 共有Interpreterオプション`NYASH_NY_PLUGINS_SHARED=1`)で静的定義を共有。ログに REGISTERED を出力。
- Phase C言語結線: `using <ns>``NyModules` 参照→未解決時にファイル/パッケージ解決nyash.linkへフォールバック。
■ 直近で完了したこと(主要抜粋)
- R1: JSON v0 ブリッジ(`--ny-parser-pipe`/`--json-file`)、変換器 `src/runner/json_v0_bridge.rs`、スモーク追加
- R2: ラウンドトリップ E2E`tools/ny_roundtrip_smoke.{sh,ps1}`
- R3: 直結ブリッジ v0`--parser ny`/`NYASH_USE_NY_PARSER=1``NYASH_DUMP_JSON_IR=1`)→ `return (1+2)*3` で 9
- R5: Ny スクリプトプラグイン([ny_plugins]列挙実行OK/FAIL 出力・列挙のみガード付き)
- AOT P2(step1): RUN スモーク配線(最小オブジェクト生成+実行ログ)
- ■ 直近で完了したこと(主要抜粋)
- T0: MIRインタープリタ強化分岐/比較/PHI/extern/Box最小 Runner 観測ログ
- T1: Nyash製ミニパーサ整数/四則/括弧/return→ JSON IR v0 出力
- T2: JSON IR v0 → MIRModule 受け口(`--ny-parser-pipe`
- T3: CLI 切替/ヘルプ(`--ny-parser-pipe`/`--json-file`、mirヘルプ追補
- T4: Docs/Samples/Runner scriptsapps/ny-mir-samples, tools/*, README 追補)
- Phase 15 起点準備
- CLIに `--backend cranelift-aot``--poc-const` を追加(プレースホルダ動作)。
- `src/backend/cranelift/{mod.rs,aot_box.rs,linker_box.rs}` の雛形追加feature gate
- MIR解釈層スケルトン`semantics/eval.rs``backend/mir_interpreter.rs`)の確認
■ 開発者向けクイックメモ
- ビルド
- VM/JIT: `cargo build --release --features cranelift-jit`
- LLVM必要時: `LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix) cargo build --release --features llvm`
- AOT導入後: `cargo build --release --features cranelift-aot`
- スモークDRYRUN→実行
- `./tools/aot_smoke_cranelift.sh release`
- 実行モード: `CLIF_SMOKE_RUN=1`
- 参照
- Phase 15 概要/ロードマップ: `docs/development/roadmap/phases/phase-15/README.md`, `docs/development/roadmap/phases/phase-15/ROADMAP.md`
- ハンドオフ: `docs/handoff/phase-15-handoff.md`
- 設計/API: `docs/backend-cranelift-aot-design.md`, `docs/interfaces/*`
■ 合否基準P0: Ny→MIR→MIR-Interp→VM 最小成立)
- 自作Nyashパーサ最小サブセットが Nyash で動作し、テスト入力から中間形式(JSON暫定)を生成できる。
- Runner が中間形式を MIRModule に変換し、MIR 解釈層で実行して既知の結果(例: `Result: 42`)を出力する。
- 代表ケース(整数四則演算/括弧/returnで往復が安定。
■ JSON IR v0暫定スキーマ
- version: 整数(例: 0
- kind: 固定 "Program"
- body: 配列Stmt[]
- Stmt最小
- { "type": "Return", "expr": Expr }
- Expr最小
- { "type": "Int", "value": 123 }
- { "type": "Binary", "op": "+"|"-"|"*"|"/", "lhs": Expr, "rhs": Expr }
- error失敗時
- { "version":0, "kind":"Error", "error": { "message": "...", "span": {"start":N, "end":M} } }
-
- `return 1+2*3` → {"version":0,"kind":"Program","body":[{"type":"Return","expr":{"type":"Binary","op":"+","lhs":{"type":"Int","value":1},"rhs":{"type":"Binary","op":"*","lhs":{"type":"Int","value":2},"rhs":{"type":"Int","value":3}}}}]}
- `return (1+2)*3``Binary('*', Binary('+',1,2), 3)` の形で生成
■ 補足(優先/範囲)
- 先行するのは Ny→MIR→MIR-Interp→VM の自己ホスト経路AOTはP2以降
- OS 優先: Windows →(後続で Linux/macOS
- メモリ/GC: P0は整数演算/定数返し中心でNyRT拡張不要。
- Codex 非同期運用: `tools/codex-async-notify.sh``tools/codex-keep-two.sh` 継続利用。
## 実行コマンド(サマリ)
- VM/JIT 実行例
- `printf "Hello\n" | NYASH_CLI_VERBOSE=0 ./target/release/nyash apps/ny-echo/main.nyash`
- `printf "Hello\n" | NYASH_CLI_VERBOSE=0 ./target/release/nyash --backend vm apps/ny-echo/main.nyash`
- AOT スモークPhase 15
- Unix/WSL: `./tools/aot_smoke_cranelift.sh release`
- Windows: `pwsh -File tools/aot_smoke_cranelift.ps1 -Mode release`
- 実行時: `CLIF_SMOKE_RUN=1` を付与
- JSON v0 ブリッジR1 Quick Start
- パイプ実行Unix/WSL: `printf '{"version":0,"kind":"Program","body":[{"type":"Return","expr":{"type":"Binary","op":"+","lhs":{"type":"Int","value":1},"rhs":{"type":"Binary","op":"*","lhs":{"type":"Int","value":2},"rhs":{"type":"Int","value":3}}}}]}' | ./target/release/nyash --ny-parser-pipe`
- ファイル指定Unix/WSL: `./target/release/nyash --json-file sample.json`
- スモークUnix/Windows: `./tools/ny_parser_bridge_smoke.sh` / `pwsh -File tools/ny_parser_bridge_smoke.ps1`
- E2E ラウンドトリップR2
- Unix/WSL: `./tools/ny_roundtrip_smoke.sh`
- Windows: `pwsh -File tools/ny_roundtrip_smoke.ps1`
- tmux通知で並列実行:
- `CODEX_ASYNC_DETACH=1 ./tools/codex-async-notify.sh "./tools/ny_roundtrip_smoke.sh" codex`
- `CODEX_ASYNC_DETACH=1 ./tools/codex-async-notify.sh "pwsh -File tools/ny_roundtrip_smoke.ps1" codex`
- Ny プラグイン列挙R5
- 有効化: `--load-ny-plugins` または `NYASH_LOAD_NY_PLUGINS=1`
- `nyash.toml` 例:
```toml
ny_plugins = [
"apps/std/ny-config.nyash",
"apps/plugins/my-helper.nyash"
]
```
- 実行: 列挙に加え、Interpreterで順次実行ベストエフォート
- ガード: `NYASH_NY_PLUGINS_LIST_ONLY=1` で列挙のみ(実行しない)
- 注意: プラグインスクリプトは副作用の少ない初期化/登録処理に限定推奨。
## トレース/環境変数(抜粋)
- AOT/Link: `NYASH_LINKER`, `NYASH_LINK_FLAGS`, `NYASH_LINK_VERBOSE`
- ABI: `NYASH_ABI_VTABLE=1`, `NYASH_ABI_STRICT=1`
- VM/JIT: `NYASH_VM_PIC_STATS`, `NYASH_JIT_DUMP` など従来通り
---
詳細な履歴や議事録は docs 配下の Phase 15 セクションを参照してください。
- ny-configR4
- `./target/release/nyash apps/std/ny-config.nyash`
- 現状: Interpreter 経路のプラグイン初期化順序により FileBox/TOMLBox を使うには Runner 側の微調整が必要VM 経路への移行 or プラグイン登録の早期化)。スクリプト本体は追加済み。
- 直結ブリッジ v0R3 Quick Start
- `printf 'return (1+2)*3\n' > t.ny && NYASH_USE_NY_PARSER=1 NYASH_DUMP_JSON_IR=1 ./target/release/nyash t.ny`