Files
hakorune/CURRENT_TASK.md

310 lines
24 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 — Phase 15 SelfHosting (20250917)
Summary
- Default execution is MIR13 (PHIoff). Bridge/Builder do not emit PHIs; llvmlite synthesizes PHIs when needed. MIR14 (PHIon) remains experimental for targeted tests.
- PyVM is the semantic reference engine; llvmlite is used for AOT and parity checks.
- GC: user modes defined; controller実装rc+cycle skeleton + metrics/diagnosticsに移行。LLVM safepoint輸出/NyRT配線と自動挿入envゲートONを完了。
Update (20250918 — PyVM/llvmlite 主軸の再確認と理由)
- Rust VM/Interpretervmlegacy/interpreterlegacyは既定OFF切り離し。理由: MIR13 期の移行で追随工数が合わず、当面は保守最小/比較用に限定。
- 現在の主軸は PyVM意味論参照 llvmliteAOT/EXEfirst`--backend vm` は PyVM にフォールバック。
Refactoring — Code Quality (High Priority, 20250917 夜間)
- MIR instruction meta deboilerplate:
- Added `inst_meta!` macro and migrated major instructions (Unary/Compare/Load/Cast/TypeOp/Array{Get,Set}/Return/Branch/Jump/Print/Debug/Barrier*/Ref*/Weak*/Future*/Phi/NewBox).
- File `src/mir/instruction_kinds/mod.rs` shrank ~100 lines; behavior unchanged (introspection only).
- Tests safety pass (unwrap elimination):
- `src/tests/typebox_tlv_diff.rs` now uses `with_host` + `EnvGuard` + `inv_{ok,some,void}` helpers.
- Removed all `.unwrap()` from the file; failures carry context via `expect` or helper panic messages.
- Tokenizer duplication cut:
- Centralized singlechar token mapping via `single_char_token()`; kept longestmatch logic for multichar ops.
- Box operators deduplicate:
- Added `impl_static_numeric_ops!` for Integer/Float static ops (Add/Sub/Mul/Div), preserved zerodivision checks.
- Introduced `concat_result` and `can_repeat`; simplified Dynamic* impls and `OperatorResolver` via helper functions.
- Net plugin modularization (unsafe/TLV/state split):
- New: `plugins/nyash-net-plugin/src/ffi.rs` (CStr/ptr helpers), `tlv.rs` (encode/decode), `state.rs` (global maps/IDs).
- `lib.rs` delegates to these modules; unsafe is centralized, TLV logic unified, globals encapsulated.
— Python plugin refactor (Phase15)
- ffi 分離: `plugins/nyash-python-plugin/src/ffi.rs` に CPython ローダ/シンボル/`ensure_cpython()` を移設(挙動等価)。
- GILGuard 適用拡大: `eval/import/getattr/str/call/callKw` の全パスを `gil::GILGuard` で保護。手動 Ensure/Release を撤去。
- pytypes 導入: `plugins/nyash-python-plugin/src/pytypes.rs`
- TLV→Py 変換を集約: `count_tlv_args/tuple_from_tlv/kwargs_from_tlv`(内部 `fill_*` で unsafe を局在化)。
- `take_py_error_string` を移設し、lib 側からの呼び出しを置換。
- 参照ヘルパ(`incref/decref`)と CString/CStr ヘルパを用意(段階移行用)。
- 旧ロジックの削除/整理:
- `lib.rs``fill_kwargs_from_tlv` を削除pytypes へ移行済み)。
-`tlv_count_args``fill_tuple_from_tlv` は廃止(コメント化→撤去予定)。
- ビルド: `cargo check -p nyash-python-plugin` 警告ゼロ、Net プラグインも警告ゼロを維持。
Done (20250918)
- Python plugin refactor 完了
- RAII: `PyOwned`/`PyBorrowed` 導入+ `OBJ_PTRS` 撤去。参照は型で管理Drop=DecRef
- autodecode を `pytypes` に移設(`DecodedValue`)。呼び出し側は TLV 書き戻しのみ。
- CString/CStr/bytes 変換を `pytypes` に統一。
- ログ出力を `NYASH_PY_LOG` でガードし既定静音化。
- クリーンアップ: 過剰 `allow(dead_code)` の縮小とコメント整理。
- ny-llvmc: EXE 出力対応
- `--emit exe/obj``--nyrt <dir>``--libs` を実装。`.o` 生成後に NyRT とリンクして実行可能に。
- 代表ケースで EXE 実行exit codeを確認。
- CLI: 直接 EXE 出力
- `nyash --emit-exe <out> [--emit-exe-nyrt <dir>] [--emit-exe-libs "<flags>"]` を追加。MIR JSON を内部出力→`ny-llvmc` 呼出し→EXE 生成。
- Selfhost ParserStage2
- コメント対応(`//``/* ... */`)を `skip_ws` に統合。
- 文字列エスケープ(`\n`/`\r`/`\t`/`\"`/`\\`/最小 `\uXXXX`)を `read_string_lit`/`parse_string2` に追加。
- Smokes/Test 整理(ローカル)
- 新ランナー: `tools/test/bin/run.sh``--tag fast` で最小セット)。
- 共通ヘルパ: `tools/test/lib/shlib.sh`(ビルド/実行/アサート)。
- fast セットに crateexe3件/bridge 短絡/LLVM quick/ifmerge/py unit を追加。
- PyVM 基本スモークを JSON→`pyvm_runner.py` で stdout 判定に移行。
- Python ユニット: `src/llvm_py/tests/test_phi_wiring.py``tools/python_unit.sh` で起動fast 経由)。
- Runner selfhost リファクタ小PR
- 共通化: `src/runner/modes/common_util/selfhost/{child.rs,json.rs}` を新設し、子プロセス起動と JSON v0 抽出/パースを分離。
- 移行: `src/runner/selfhost.rs` の子起動・PyVM 実行経路を新ヘルパで置換(挙動等価)。
- 清掃: 未使用 import/mut の削減、到達不能 return の解消(`runner/mod.rs` の benchmark 分岐)。
Today (20250918) — ExternCall 整理と SelfHost M2 の土台
- ExternCall/println 正規化を docs に明文化(`docs/reference/runtime/externcall.md`。README/README.ja からリンク。
- NyRT: `NYASH_NYRT_SILENT_RESULT=1` で標準化 `Result:` 行を抑止tests 既定ON
- PyVM: console.warn/error/trace は stderr、console.log は stdout に出力MVP
- SelfHost M2 MVP: `MirEmitterBox` 追加Return(Int)→const+ret。コンパイラに `--emit-mir` を実装。
- Runner自己ホスト子プロセス
- 子に `NYASH_JSON_ONLY=1 / NYASH_VM_USE_PY=1 / NYASH_DISABLE_PLUGINS=1` を付与し、出力と依存を安定化。
- `NYASH_NY_COMPILER_CHILD_ARGS` を必ず `--` の後段に注入。
- VM 経路は `NYASH_ENABLE_USING=1` 時に using 行をストリップ(暫定)。
Next — SelfHost M2 拡張(短期)
- Runner: 子 stdout の JSON 捕捉を堅牢化fallback: tmp に JSON を書かせ親で読む)。
- MirEmitterBox の段階実装:
1) Binary+,-,*,/)→ `binop`
2) Compare==,!=,<,<=,>,>=)→ `compare`i64 0/1
3) print/println → `externcall env.console.log`
4) Ternary → branch + retPHIoff; Copy 合成)
- スモーク拡充PyVM→EXE パリティ)
- `return 1+2*3`exit=7`ternary_basic`exit=10、console.logEXE は exit のみ)。
Next (Immediate)
- tools/build_llvm.sh の crate→EXE 統合
- `NYASH_LLVM_COMPILER=crate` かつ `NYASH_LLVM_EMIT=exe` の場合、`ny-llvmc --emit exe` を呼び出し、手動リンクをスキップ。
- `NYASH_LLVM_NYRT`/`NYASH_LLVM_LIBS` 環境変数でリンク先/追加フラグを指定可能にLinux 既定は `-ldl -lpthread -lm`)。
- Selfhost/EXE スモークの整備
- 代表3ケースconst/binop/branch など)の JSON→ny-llvmc→EXE→実行をワンショットで検証するスクリプトLinux
- 既存 `exe_first_smoke.sh`/`build_compiler_exe.sh` の補助として crate 直結経路を並行維持。
- CI 追補(簡素化方針)
- GitHub Actions は `fast-smoke` 一本に集約済み。必要時に拡張。
- crateEXE 3件10/50/1を維持。PyVM 追加はローカル test ランナーに寄せる。
- Test consolidation
- 必要スモークから順次 `tools/test/` に移行pyvm/bridge/crate-exe を優先)。
- 既存単体スクリプトは `tools/smokes/archive/` へ暫定退避(参照減後に削除検討)。
What Changed (recent)
- MIR13 default enabled
- `mir_no_phi()` default set to true (can disable via `NYASH_MIR_NO_PHI=0`).
- Curated LLVM runner defaults to PHIoff; `--phi-on` enables MIR14 lane.
- Added doc: `docs/development/mir/MIR13_MODE.md`; README references it.
- JSON v0 Bridge lowering refactor + features
- Split helpers: `src/runner/json_v0_bridge/lowering/{if_else.rs, loop_.rs, try_catch.rs, merge.rs}`(既存)に加え、式系を `lowering/expr.rs` に分離(振る舞い不変)。
- 新規サポート: Ternary/Peek の Lowering を実装し、`expr.rs` から `ternary.rs`/`peek.rs` へ委譲MIR13 PHIoff=Copy合流PHIon=Phi 合流)。
- Selfhost 生成器Stage1 JSON v0に Peek emit を追加: `apps/selfhost-compiler/boxes/parser_box.nyash`
- Selfhost/PyVM スモークを通して E2E 確認peek/ternary
- llvmlite stability for MIR13bringup進行中
- Controlflow 分離: `instructions/controlflow/{branch,jump,while_.py}` を導入し、`llvm_builder.py` の責務を縮小。
- プリパス(環境変数で有効化): `NYASH_LLVM_PREPASS_LOOP=1`, `NYASH_LLVM_PREPASS_IFMERGE=1`
- ループ検出(単純 while 形)→ 構造化 lowerLoopForm失敗時は regular while
- ifmergeretmerge前処理: ret 値 PHI の前宣言と finalize 配線の一意化
- CFG ユーティリティ: `src/llvm_py/cfg/utils.py`preds/succs
- PHI 配線の分離: `src/llvm_py/phi_wiring.py` に placeholder/finalize を移管builder 薄化)
- 値解決ポリシー共通化: `src/llvm_py/utils/values.py`prefer sameblock SSA → resolver
- vmap の perblock 化: `vmap_cur` を用意し、ブロック末に `block_end_values` へスナップショット。crossblock 汚染を抑制。
- Resolver 強化: endofblock 解決で他ブロック PHI を安易に採用しない(自己参照/非支配を回避)。
- BuildCtx 導入: `src/llvm_py/build_ctx.py` で lowering 引数を集約compare/ret/call/boxcall/externcall/typeop/newbox/safepoint が ctx 対応)
- トレース統一: `src/llvm_py/trace.py` を追加し、`NYASH_CLI_VERBOSE`/`NYASH_LLVM_TRACE_PHI`/`NYASH_LLVM_TRACE_VALUES` を一元管理
- curated スモーク拡張: `tools/smokes/curated_llvm.sh --with-if-merge` を追加ifmerge ケース含む)
- Parity runner pragmatics
- `tools/pyvm_vs_llvmlite.sh` compares exit code by default; use `CMP_STRICT=1` for stdout+exit.
- Stage2 smokes更新: `tools/selfhost_stage2_smoke.sh` に "Peek basic" を追加。
- GC controller/metricsPhase15
- `GcController`統合フック導入CLI `--gc``NYASH_GC_MODE`。CountingGcは互換ラッパに縮退。
- NyRT exports: `ny_safepoint` / `ny_check_safepoint` / `nyash.gc.barrier_write` → runtime hooks 連携。
- LLVM自動 safepoint 挿入loop header / call / externcall / boxcall`NYASH_LLVM_AUTO_SAFEPOINT` で制御(既定=1
- メトリクスtext/JSON`NYASH_GC_METRICS{,_JSON}=1`。JSONに alloc_count/alloc_bytes/trial_nodes/edges/collections/last_ms/reason_bits/thresholds を含む。
- 診断:`NYASH_GC_LEAK_DIAG=1` でハンドルTopK残存出力。Array/Map 到達集合の試走gc_trace
- CI/DevOpsSelfHosting パイロット強化)
- 追加: `.github/workflows/selfhost-bootstrap.yml`(常時) — `tools/bootstrap_selfhost_smoke.sh` を40s timeoutで実行。
- 追加: `.github/workflows/selfhost-exe-first.yml`(任意/cron — LLVM18 + llvmlite をセットアップし `tools/exe_first_smoke.sh` を実行。
- スモーク堅牢化: `tools/bootstrap_selfhost_smoke.sh`/`tools/exe_first_smoke.sh` に timeout を付与。
- JSON v0 スキーマ追加: `docs/reference/mir/json_v0.schema.json` と検証ツール `tools/validate_mir_json.py`。EXEfirst スモークに組み込み。
- LLVM crate 分離の足場Phase15.6 向け)
- 新規クレート(スキャフォールド): `crates/nyash-llvm-compiler`CLI名: `ny-llvmc`)。
- `--dummy --out <o>` でダミー `.o` を生成。
- `--in <mir.json|-> --out <o>` で MIR(JSON)→`.o` を llvmlite ハーネス経由で生成(`tools/llvmlite_harness.py`)。
- ドキュメント追記: `docs/LLVM_HARNESS.md``ny-llvmc` とスキーマ検証の項を追加。
- Nyash ABI v2TypeBox検出の足場
- ローダに `nyash_typebox_<Box>` シンボル検出を追加(`abi_tag='TYBX'`/`version`/`invoke_id`し、Boxスペックへ保持まだ実行には未使用
Current Status
- Selfhosting Bridge → PyVM smokes: PASSStage2 代表: array/string/logic/if/loop/ternary/peek/dot-chain
- PyVM core fixes applied: compare(None,x) の安全化、Copy 命令サポート、最大ステップ上限NYASH_PYVM_MAX_STEPS
- MIR13PHIoff: if/ternary/loop の合流で Copy が正しく JSON に出るよう修正emit_mir_json + builder nophi 合流)
- Curated LLVMPHIoff 既定): 継続(個別ケースの IR 生成不備は未着手)
LLVM ハーネスllvmlite/AOT:
- `loop_if_phi`: プリパスON構造化whileで EXE 退出コード 0
- `ternary_nested`: ifmerge プリパスphi_wiring で retmerge を構造化し、退出コード一致(緑)。
Next (short plan)
0) Refactor/Structure継続
- BuildCtx 展開を完了barrier/atomic/loopform も ctx 主経路に)
- trace 化の残り掃除(環境直読み print を削減)
- phi_wiring を関数分割(解析/配線/タグ付け)→ ユニットテスト追加
1) Legacy Interpreter/VM offboarding (phaseA):
- ✅ Introduced `vm-legacy` feature (default OFF) to gate old VM execution層。
- ✅ 抽出: JIT が参照する最小型(例: `VMValue`)を薄い共通モジュールへ切替(`vm_types`)。
-`interpreter-legacy`/`vm-legacy` を既定ビルドから外し、既定は PyVM 経路に(`--backend vm` は PyVM へフォールバック)。
- ✅ Runner: vm-legacy OFF のとき `vm`/`interpreter` は PyVM モードで実行。
- ✅ HostAPI: VM 依存の GC バリアは vm-legacy ON 時のみ有効。
- ✅ PyVM/Bridge Stage2 スモークを緑に再整備(短絡/三項/合流 反映)
2) Legacy Interpreter/VM offboarding (phaseB):
- 物理移動: `src/archive/{interpreter_legacy,vm_legacy}/` へ移設(ドキュメント更新)。
3) LLVM/llvmlite 整備(優先中):
- MIR13 の Copy 合流を LLVM IR に等価反映predlocalize or PHI 合成): perblock vmap 完了、resolver/phi_wiring 強化済。
- 代表ケース:
- `apps/tests/loop_if_phi.nyash`: プリパスONで緑退出コード一致
- `apps/tests/ternary_nested.nyash`: ifmerge + phi_wiring で退出コード一致を継続。
- `tools/pyvm_vs_llvmlite.sh` で PyVM と EXE の退出コード一致(必要に応じて CMP_STRICT=1
4) PHIon lane任意: `loop_if_phi` 支配関係を finalize/resolve の順序強化で観察(低優先)。
5) Runner refactor小PR:
-`selfhost/{child.rs,json.rs}` 分離済み(子起動と JSON 抽出の共通化)。
- `modes/common/{io,resolve,exec}.rs` 分割; `runner/mod.rs`の表面削減(継続)。
5.1) Selfhosting using 移行(段階)
- ✅ compiler: using 宣言+参照を Alias 化include は暫定残置)
- parser/tooling: ParserV0/Tokenizer/DepTree を順次名前空間化し、include を削減
- 実行時: `--enable-using``--using-path apps:selfhost` を前提に整備Runner 側でストリップ+登録)
6) Optimizer/Verifier thinhub cleanup非機能: orchestrator最小化とパス境界の明確化。
7) GCcontroller観測の磨き込み
- JSON: running averages / roots要約任意 / 理由タグ拡張
- 収集頻度のサンプリング支援
- plugin/FFI は非移動のまま、ハンドル間接を継続
8) LLVM crate splitEXEfirst
- LLVM harness/builder を `nyash-llvm-compiler` crate と CLI`ny-llvmc`)に分離(入力: MIR JSON v0 / 出力: .o/.exe
- `tools/build_llvm.sh` 内部を新crate APIに寄せ、Runnerからも呼べるよう段階移行
- CI: selfhost smokes と LLVM EXE smokes を分離しアーティファクト配布線を評価
9) Nyash ABI v2 統一(後方互換なし)
- 方針: 既存 TypeC ABIlibrarylevel `nyash_plugin_invoke`を撤退し、Box単位の TypeBox へ一本化。
- ローダ: `nyash_typebox_<Box>``invoke_id(instance_id, method_id, ...)` を実行ポインタとして保持し、birth/fini も含めて統一。
- プラグイン: 公式プラグインString/File/Array/Map/Console/Integerを順次 v2 へ移行。`resolve(name)->method_id` 実装。
- 仕様: エラー規約OK/E_SHORT/E_ARGS/E_TYPE/E_METHOD/E_HANDLE/E_PLUGIN・TLVタグ一覧を docs に凍結、Cヘッダ雛形`nyash_abi.h`)を配布。
- CI: v2専用スモークを常時化Linux。Windows/macOS は任意ジョブで追随。
How to Run
- PyVM reference smokes: `tools/pyvm_stage2_smoke.sh`
- Bridge → PyVM smokes: `tools/selfhost_stage2_bridge_smoke.sh`
- LLVM curated (PHIoff default): `tools/smokes/curated_llvm.sh`
- LLVM PHIon (experimental): `tools/smokes/curated_llvm.sh --phi-on`
- LLVM curated with ifmerge prepass: `tools/smokes/curated_llvm.sh --with-if-merge`
- Parity (AOT vs PyVM): `tools/pyvm_vs_llvmlite.sh <file.nyash>` (`CMP_STRICT=1` to enable stdout check)
- 開発時の補助: `NYASH_LLVM_PREPASS_LOOP=1` を併用loop/ifmerge のプリパス有効化)。
- GC modes/metrics: see `docs/reference/runtime/gc.md``--gc` / 自動 safepoint / 収集トリガ / JSONメトリクス
Trace (PHI wiring / LLVM harness)
- `NYASH_LLVM_TRACE_PHI=1`: PHI 解析/配線のトレースを有効化1 行 JSON
- `NYASH_LLVM_TRACE_OUT=/path/to/file`: 出力先ファイル(未指定時は標準出力)。
- 例: `NYASH_LLVM_TRACE_PHI=1 NYASH_LLVM_TRACE_OUT=/tmp/phi_trace.jsonl NYASH_LLVM_USE_HARNESS=1 ./target/release/nyash --backend llvm apps/tests/loop_if_phi.nyash`
Trace (PHI wiring / LLVM harness)
- `NYASH_LLVM_TRACE_PHI=1`: PHI 解析/配線のトレースを有効化1 行 JSON
- `NYASH_LLVM_TRACE_OUT=/path/to/file`: 出力先ファイル(未指定時は標準出力)。
- 例: `NYASH_LLVM_TRACE_PHI=1 NYASH_LLVM_TRACE_OUT=/tmp/phi_trace.jsonl NYASH_LLVM_USE_HARNESS=1 ./target/release/nyash --backend llvm apps/tests/loop_if_phi.nyash`
SelfHosting CI
- Bootstrap常時: `.github/workflows/selfhost-bootstrap.yml`
- EXEfirst任意: `.github/workflows/selfhost-exe-first.yml`
LLVM Crate試用
- ダミー: `cargo build -p nyash-llvm-compiler --release && ./target/release/ny-llvmc --dummy --out /tmp/dummy.o`
- JSON→.o: `./target/release/ny-llvmc --in mir.json --out out.o`
Operational Notes
- 環境変数
- `NYASH_PYVM_MAX_STEPS`: PyVM の最大命令ステップ(既定 200000。ループ暴走時に安全終了。
- `NYASH_VM_USE_PY=1`: `--backend vm` を PyVM ハーネスへ切替。
- `NYASH_PIPE_USE_PYVM=1`: `--ny-parser-pipe` / JSON v0 ブリッジも PyVM 実行に切替。
- `NYASH_CLI_VERBOSE=1`: ブリッジ/エミットの詳細出力。
- スモークの実行例
- `timeout -s KILL 20s bash tools/pyvm_stage2_smoke.sh`
- `timeout -s KILL 30s bash tools/selfhost_stage2_bridge_smoke.sh`
Backend selection (PhaseA after vmlegacy off)
- Default: `vm-legacy` = OFF, `interpreter-legacy` = OFF
- `--backend vm` → PyVM 実行python3 と `tools/pyvm_runner.py` が必要)
- `--backend interpreter` → legacy 警告の上で PyVM 実行
- `--benchmark` → vmlegacy が必要(`cargo build --features vm-legacy`
Enable legacy VM/Interpreter (optin)
- `cargo build --features vm-legacy,interpreter-legacy`
- その後 `--backend vm`/`--backend interpreter` が有効
Key Flags
- `NYASH_MIR_NO_PHI` (default 1): PHIoff when 1 (MIR13). Set `0` for PHIon.
- `NYASH_VERIFY_ALLOW_NO_PHI` (default 1): relax verifier for PHIless MIR.
- `NYASH_LLVM_USE_HARNESS=1`: route AOT through llvmlite harness.
- `NYASH_LLVM_TRACE_PHI=1`: trace PHI resolution/wiring.
- `NYASH_LLVM_PREPASS_LOOP=1`: enable loop prepass (while detection/structure)
- `NYASH_LLVM_PREPASS_IFMERGE=1`: enable ifmerge (retmerge) prepass
- `NYASH_LLVM_TRACE_VALUES=1`: trace value resolution path
Notes / Policies
- Focus is selfhosting stability. JIT/Cranelift is out of scope (safety fixes only).
- PHI generation remains centralized in llvmlite; Bridge/Builder keep PHIoff by default.
- No full tracing/moving GC yet; handles/Arc lifetimes govern object retention. Safepoint/barrier/roots are staging utilities.
- GC mode UX: keep userfacing modes minimal (rc+cycle, minorgen); advanced modes are optin for language dev.
- Legacy Interpreter/VM は段階的にアーカイブへ。日常の意味論確認は PyVM を基準として継続。
Plugin ABI v2 updates (20250917)
- v2 migration (TypeBox) 完了/進捗
- 完了: FileBox / PathBox / RegexBox / MathBox / TimeBox
- Net 完了: ClientBox / ResponseBox / RequestBox / ServerBox / SockServerBox / SockClientBox / SockConnBox
- 既存: ConsoleBox / StringBox / IntegerBox / MapBox は v2 実装あり
- ローダ診断強化
- `NYASH_DEBUG_PLUGIN=1` で TypeBox 未検出/ABI不一致/invoke_id未定義の詳細をログ出力
- Docs 追補
- `docs/reference/plugin-abi/nyash_abi_v2.md` に命名規約・例Regex/Netを追記
- `include/nyash_abi.h`Cヘッダ追加済み
- 設定/スモーク/CI
- `nyash.toml` に各 v2 Box を登録type_id/method_id 定義)
- スモーク: `tools/plugin_v2_smoke.sh`Linux常時。全 v2 プラグインのロード確認+簡易機能スモーク(`apps/tests/plugin_v2_functional.nyash`
- LLVM 共通化の足場
- `tools/build_llvm.sh``NYASH_LLVM_COMPILER=crate|harness` を追加(`crate``ny-llvmc`。JSON は `NYASH_LLVM_MIR_JSON` 指定)
- JSON スキーマ検証を可能なら実行(`tools/validate_mir_json.py`
Plugin ABI v2 updates — 完了報告20250917
- v2 migration全 firstparty 完了)
- Python 系: `PyRuntimeBox`/`PyObjectBox`/`PythonParserBox`/`PythonCompilerBox` を v2 化
- 既存 firstpartyFile/Path/Math/Time/Regex/Net/String/Array/Map/Integer/Consoleを v2 化
- Encoding/TOML も v2 追加(`EncodingBox`/`TOMLBox`)し `nyash.toml` に登録
- Legacy 撤去
- 旧ローダ(`src/runtime/plugin_loader_legacy.rs`と旧CABI FileBox を削除
- 全プラグインの v1 エクスポートabi/init/invokeを物理削除v2専用化
- スモーク/CI
- v2 ロード機能Regex/Response/Net往復スモークを常時
- `ny-llvmc`crateで .o 生成するCIジョブを追加Linux
- nyash → MIR JSON emit
- CLI `--emit-mir-json <path>` を追加し、`ny-llvmc` 直結導線を整備
Next — SelfHosting/EXEcrate 直結)
- ny-llvmc 機能拡張(.exe 出力)
- `ny-llvmc --emit exe --out <path>` を実装(`.o` + NyRT リンク)。`--nyrt <dir>`/`--libs <extra>` を受理
- 既存 `tools/build_llvm.sh` の crate 経路と統合env: `NYASH_LLVM_COMPILER=crate`
- Linux でのリンクフラグ最小化(`-Wl,--whole-archive -lnyrt -Wl,--no-whole-archive -ldl -lpthread -lm`
- CI 拡張
- `.o` 生成に加え、`.exe` 生成実行exit code 検証ジョブを追加Linux
- 代表3ケースconst/binop/branchで EXE を起動し `0` 戻りを確認
- Selfhost pipeline 寄り
- nyash CLI `--emit-mir-json` を EXE-first パスにも活用JSON → ny-llvmc → exe → 実行)
- 将来: PyVM/llvmlite パリティベンチ(小規模)→ EXE でも同値を継続確認
- Docs/Guides 更新
- `docs/LLVM_HARNESS.md` に ny-llvmc の exe 出力手順を追記
- `docs/guides/selfhost-pilot.md` に crate 直結(.o/.exe手順とトラブルシュート