hv1 verify: add direct route (env JSON) and clean inline path; fix v1 phi incoming order; make test_runner use hv1 direct; add phase2037 phi canaries; load modules.workspace exports for alias; update docs (phase-20.38, source extensions) and CURRENT_TASK
This commit is contained in:
2
.github/pull_request_template.md
vendored
2
.github/pull_request_template.md
vendored
@ -11,6 +11,6 @@
|
||||
|
||||
### Selfhosting‑dev Gate(このブランチ向け)
|
||||
- [ ] `bash tools/selfhost_vm_smoke.sh` が PASS(plugins 無効)
|
||||
- [ ] `docs/CONTRIBUTING-MERGE.md` の境界方針を満たす(Cranelift実装差分は専用ブランチ)
|
||||
- [ ] `docs/development/engineering/merge-strategy.md` の境界方針を満たす(Cranelift実装差分は専用ブランチ)
|
||||
- 影響範囲: runner / interpreter / vm / tools / docs
|
||||
- Feature gates(該当時): `cranelift-jit`, その他(記述)
|
||||
|
||||
115
CURRENT_TASK.md
115
CURRENT_TASK.md
@ -1,11 +1,70 @@
|
||||
# Current Task — Phase 20.34 (Concise)
|
||||
# Current Task — Phase 20.38 (Extern/C‑ABI bring‑up, Hako‑first verify)
|
||||
|
||||
This document is intentionally concise (≤ 500 lines). Detailed history and per‑phase plans are kept under docs/private/roadmap/. See links below.
|
||||
|
||||
Focus (now)
|
||||
- Keep quick profile green and stabilize verification on the Core route.
|
||||
- Mini‑VM (Hako) is kept, but canaries that were flaky are temporarily routed to Core for execution. Mini‑VM green will resume in Phase 20.36.
|
||||
- Prepare Phase 20.35 (MIR JSON v1 loader expansion) without changing default behavior.
|
||||
- Extern/C‑ABI の最小導線(既定OFF)を整備し、Hakorune primary で emit/codegen を rc=0 + 安定タグに固定。
|
||||
- v1 Dispatcher を IR 反復に切替(scan 依存を排除)、φテーブル適用の堅牢化(strict/tolerate)。
|
||||
- Verify 既定を v1→Hako(Core fallback)へ整流(段階)。
|
||||
- Using はテキスト統合(merge_prelude_text)に一本化、include は quick=ERROR(ハーネス方針と整合)。
|
||||
- 拡張子ポリシー(暫定): `.nyash`→Nyash VM、`.hako`→Hakorune VM。詳細は docs/guides/source-extensions.md。
|
||||
|
||||
Remaining (20.38 — inline alias stabilization: updated)
|
||||
- Route: vm.rs に hv1 直行ルートを追加(HAKO_ROUTE_HAKOVM=1 かつ NYASH_VERIFY_JSON)。NyashParser を完全にバイパス。
|
||||
- Alias only: verify は alias のみで安定(include/preinclude は撤去・既定OFF)。
|
||||
- Safety sweep: “"" + <Box>” の連結全廃(必要時のみ to-string)。
|
||||
|
||||
Hotfix Plan — Using/Prelude Unification (Self‑Host)
|
||||
- Problem: .hako を NyashParser に通す経路でパース落ち(Invalid expression)。
|
||||
- Decision: プレリュードは“テキスト統合(merge_prelude_text)”に一本化。AST マージは撤退。
|
||||
- Resolver 入口は共通(alias/modules/packages/builtin)。
|
||||
- 以降はメインの言語に応じて実行器へ渡す(Hako→Hakorune VM / MIR→Core)。
|
||||
- NyashParser は Nyash コードのみ。Hako は Nyash VM 経路に入れない(Fail‑Fast)。
|
||||
|
||||
Action Items (20.38)
|
||||
- P1 C‑ABI ブリッジ(既定OFF)
|
||||
- Hako provider→Rust extern_provider へ最小接続(emit/codegen)。
|
||||
- ハーネスのタグ用シム(test_runner)を撤去できる状態にする。
|
||||
- P2 v1 Dispatcher IR 完了+φテーブル堅牢化
|
||||
- V1SchemaBox.get_function_ir を構造IRで返却(blocks/phi_table)。
|
||||
- ループは IR 反復に完全切替、φ は entry 適用(命令ループから除去)。
|
||||
- 複数φ/複数incoming/空白改行混在を canary で固定。
|
||||
- P3 Verify 既定整流(完了)
|
||||
- v1→Hakorune を既定ON、Core は診断 fallback。末尾数値抽出で rc を一意化。
|
||||
- include ポリシー quick=ERROR を維持(ドキュメントと一致)。
|
||||
- P4 Resolver/alias 仕上げ
|
||||
- lang/src/vm/** の alias を監査し、直参照を払拭。normalize/trace ログは最小に整流。
|
||||
- P5 Docs 反映
|
||||
- phase‑20.38 のトグル/受け入れ条件/撤去予定のシムを反映。φ entry SSOT は IR 完了後に更新。
|
||||
- extern タグ用シムの現状と撤去条件(hv1 inline 安定後に除去)を明記。
|
||||
|
||||
Acceptance
|
||||
- extern canary(warn/error/emit/codegen): Hako primary で PASS(タグ+rc=0、シム無効でも安定)。
|
||||
- v1 φ/branch/jump の代表カナリーが IR 反復で strict PASS。tolerate ケースは期待と一致。
|
||||
- Verify 既定が v1→Hakorune(Core fallback)で quick 緑維持。
|
||||
- Hako 構文を Nyash VM で実行しようとした場合、入口で Fail‑Fast(診断メッセージ)。
|
||||
|
||||
Changes (this step)
|
||||
- hv1 直行: vm.rs 冒頭で `NYASH_VERIFY_JSON` を検出し、JSON v1/v0→MIR→Core 実行(数値のみ出力)。
|
||||
- test_runner: hv1 verify は直行(`$NYASH_BIN --backend vm /dev/null`+env JSON)。include fallback は dev 変数で明示時のみ。
|
||||
- v1 JSON Bridge: φ incoming を [pred,val] として正規化(Core parity)。
|
||||
- φ カナリー追加: multi-incoming3 / nested+sum / tolerate undefined→rc=0。
|
||||
- V1PhiAdapterBox: robust incoming scan (multi‑pair, spaces/newlines) using array‑end scanner.
|
||||
- V1SchemaBox: new block_segment_wo_phi(json, bid) to build IR segment without φ.
|
||||
- V1SchemaBox: phi_table_for_block(json,bid) 追加(dst と incoming[[pred,val],…] を返す)
|
||||
- NyVmDispatcherV1Box(FLOW): IR‑based loop(block_segment_wo_phi)+ entry φ は V1PhiTableBox.apply_table_at_entry で一括適用(scan は後退互換のfallbackに)
|
||||
- Entry φ application: still centralized in V1PhiTableBox; added optional trace hooks (HAKO_V1_FLOW_TRACE=1).
|
||||
- Canary updated to enable experiment flag: v1_hakovm_phi_simple_flow_canary_vm.sh sets HAKO_V1_ALLOW_PHI_EXPERIMENT=1.
|
||||
- φ canaries 追加: multi‑incoming / multi‑phi / whitespace混在 → いずれも PASS
|
||||
- v1 extern canaries(20.38): env.get / warn / error / emit / codegen を PASS 化(タグ+rc=0)。
|
||||
- hv1 inline prelude: prelude_v1.hako を path‑using に切替(inline -c での alias 揺れ回避)。
|
||||
- phase2038 hv1 inline canary ドライバは ALLOW_USING_FILE を付与し、preinclude で安定化を準備(現状は alias 未解決で SKIP)。
|
||||
- extern stub canaries(emit/codegen): include 依存を撤去し、rc=0 のみ確認に簡素化(タグ観測は hv1 inline カナリーへ委譲)。
|
||||
- test_runner の provider タグ用シムを撤去(hv1 inline が安定したため)。
|
||||
- vm.rs に hv1 ルーティング口を追加(opt-in、Fail‑Fast 緩和下で NYASH_VERIFY_JSON の inline を hv1 wrapper にルート)。
|
||||
- verify は env(NYASH_VERIFY_JSON)受け渡し+末尾数値抽出で rc を安定化。
|
||||
- Dispatcher(FLOW) は構造IRの反復へ完全切替(scan断片を撤去)。
|
||||
- V1Schema.get_function_ir: blocks/phi_table 構築を実装(op/text+一部フィールド抽出で dispatcher の負荷低減)。
|
||||
|
||||
What’s green (20.34)
|
||||
- Loop/PHI unify (phi_core) in JSON v0 bridge — unified path used (toggle exposed).
|
||||
@ -39,16 +98,22 @@ Recent changes (summary)
|
||||
- (map) tools/smokes/v2/profiles/quick/core/phase2035/v1_map_set_get_size_canary_vm.sh
|
||||
- Note: returns size (1) for rc stability; get-path validated structurally
|
||||
|
||||
- 20.38 extern bring-up (Hakorune primary)
|
||||
- Hakorune provider tags: prints `[extern/c-abi:mirbuilder.emit]` / `[extern/c-abi:codegen.emit_object]` when `HAKO_V1_EXTERN_PROVIDER_C_ABI=1`(既定OFF)
|
||||
- Core extern provider: when `HAKO_V1_EXTERN_PROVIDER=1`, `env.mirbuilder.emit` / `env.codegen.emit_object` return empty string (stub) to keep rc=0(verify fallbackの安定化)
|
||||
- Dispatcher(FLOW): minor cleanup to avoid stray scanning code; ret-path returns value and does not emit trailing prints
|
||||
- Canaries: phase2038 emit/codegen → PASS(タグ+rc=0 を固定)。phi 追加ケース(then→jump combo3)も PASS。
|
||||
|
||||
Open (pending)
|
||||
- なし(v1 extern env.get/env.mirbuilder.emit/env.codegen.emit_object は provider で統一)
|
||||
- P1〜P4 の実装・緑化(上記 Action Items)。
|
||||
|
||||
Active toggles (debug/verify)
|
||||
- NYASH_MIR_UNIFY_LOOPFORM=1|0
|
||||
- Default ON(実装は統一経路のみ。OFF指定時は警告を出すが挙動は統一のまま)
|
||||
- HAKO_VERIFY_PRIMARY=hakovm|core
|
||||
- 今回の flaky canary は core 側で実行(検証のみ切替)。Mini‑VM primary は Phase 20.36 で再挑戦。
|
||||
- NYASH_VM_TRACE_PHI=1 / HAKO_PHI_VERIFY=1 / NYASH_PHI_VERIFY=1
|
||||
- PHI 解析・観測(開発時のみ)
|
||||
- HAKO_VERIFY_PRIMARY=hakovm|core(既定 hakovm、Coreは診断)
|
||||
- HAKO_V1_DISPATCHER_FLOW=1(v1 FLOW 実行)
|
||||
- HAKO_V1_EXTERN_PROVIDER=1(Hako extern provider 有効)
|
||||
- HAKO_V1_EXTERN_PROVIDER_C_ABI=1(タグ/ブリッジ実験。既定OFF)
|
||||
- HAKO_V1_PHI_STRICT=1 / HAKO_V1_PHI_TOLERATE_VOID=1(φポリシー)
|
||||
- NYASH_RESOLVE_TRACE=1 / NYASH_RESOLVE_NORMALIZE=1(resolver dev)
|
||||
|
||||
How to run (quick)
|
||||
- Build: `cargo build --release`
|
||||
@ -92,6 +157,29 @@ Known open items(tracked to 20.36)
|
||||
- Mini‑VM: using/alias の推移解決(selfhost.vm.helpers.* 連鎖)
|
||||
- Mini‑VM: ret/phi の最小ケースで rc が確実に数値化されるよう整備(継続確認)
|
||||
|
||||
Next (20.37 — v1 Dispatcher & Phi)
|
||||
1) V1SchemaBox: get_function_ir(JSON→IR) を拡張(blocks/insts/phi_table を一括)
|
||||
2) NyVmDispatcherV1Box: IR反復へ切替(スキャナ依存の最終撤去)、今は二重化(IR優先/scan後退互換)
|
||||
3) Resolver/inline: AST prelude マージで推移usingを一次収束(Claude codeで進行)、ランナーは既存fallback維持
|
||||
|
||||
Next (Hotfix — Using/Prelude Unification)
|
||||
1) vm.rs: using_ast 経路を `merge_prelude_text` に一本化(ASTマージ撤去)
|
||||
2) vm.rs: Hako 構文検出で Hakorune VM へ切替(NyashParser をバイパス)
|
||||
3) strip.rs: `.hako` の AST パース抑止と診断ガイド
|
||||
4) verify: extern canary を PASS 化(末尾 rc 抽出の安定化)
|
||||
Docs:
|
||||
- docs/development/architecture/phi-entry-in-hako.md に φ entry 設計のSSOTを記載(不変条件/flags/テスト)
|
||||
|
||||
Next (20.38 — extern provider & C‑ABI)
|
||||
1) HakoruneExternProviderBox を拡張(warn/error/emit の最小タグ/空文字挙動)— 完了
|
||||
2) HAKO_V1_EXTERN_PROVIDER=1 の canary 追加(構造緑固定)— 完了
|
||||
3) C‑ABI 導線のPoC接続(emit/codegen、既定OFF)— 完了(タグ+rc=0)
|
||||
4) hv1 inline 安定化(残): -c 経路の using resolver に modules.workspace を強制ロードするか、dispatcher の using を dev 限定で path 化。
|
||||
5) include 撤去の計画(dev → 本線):
|
||||
- まず stub カナリーの include は撤去済み(rc=0 のみ確認)。
|
||||
- hv1 inline カナリーの prelude include は暫定(dev専用)。-c/alias 安定後に alias へ移行して include を撤去する。
|
||||
- ランナー側では merge_prelude_text を既定経路とし、include は quick=ERROR のポリシーを維持。
|
||||
|
||||
Roadmap links(per‑phase docs)
|
||||
- Index: docs/private/roadmap/README.md
|
||||
- Phase 20.34: docs/private/roadmap/phases/phase-20.34/README.md
|
||||
@ -104,3 +192,8 @@ Appendix — Toggle quick reference
|
||||
- NYASH_VM_TRACE_PHI=1 … VM PHI 適用トレース
|
||||
- HAKO_PHI_VERIFY=1 | NYASH_PHI_VERIFY=1 … ビルダー側の PHI inputs 検証
|
||||
- HAKO_VM_PHI_STRICT=0(互換:NYASH_VM_PHI_STRICT=0) … 実行時 PHI 厳格 OFF(開発時のみ)
|
||||
|
||||
Updates (2025-11-04)
|
||||
- hv1 inline: alias-only route stabilized (no include/preinclude). vm.rs wrapper now uses `using selfhost.vm.hv1.dispatch` and relaxes fail-fast for child.
|
||||
- Verify harness: include+preinclude fallback for v1 removed in `verify_mir_rc`; alias-only hv1 is the standard path.
|
||||
- Concat-safety (hv1 scope): replaced `"" + <int>` coercions with `StringHelpers.int_to_str(...)` in `lang/src/vm/hakorune-vm/dispatcher_v1.hako` and `lang/src/vm/boxes/mir_call_v1_handler.hako`.
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
---
|
||||
|
||||
開発者向けクイックスタート: `docs/DEV_QUICKSTART.md`
|
||||
開発者向けクイックスタート: `docs/guides/getting-started.md`
|
||||
ユーザーマクロ(Phase 2): `docs/guides/user-macros.md`
|
||||
AST JSON v0(マクロ/ブリッジ): `docs/reference/ir/ast-json-v0.md`
|
||||
セルフホスト1枚ガイド: `docs/how-to/self-hosting.md`
|
||||
|
||||
@ -49,7 +49,7 @@ Phase‑15 (2025‑09) update
|
||||
- 自己ホスト準備として Nyash 製 JSON ライブラリと Ny Executor(最小命令)を既定OFFのトグルで追加予定。
|
||||
- 推奨トグル: `NYASH_LLVM_USE_HARNESS=1`, `NYASH_PARSER_TOKEN_CURSOR=1`, `NYASH_JSON_PROVIDER=ny`, `NYASH_SELFHOST_EXEC=1`。
|
||||
|
||||
Developer quickstart: see `docs/DEV_QUICKSTART.md`. Changelog highlights: `CHANGELOG.md`.
|
||||
Developer quickstart: see `docs/guides/getting-started.md`. Changelog highlights: `CHANGELOG.md`.
|
||||
User Macros (Phase 2): `docs/guides/user-macros.md`
|
||||
Exceptions (postfix catch/cleanup): `docs/guides/exception-handling.md`
|
||||
ScopeBox & MIR hints: `docs/guides/scopebox.md`
|
||||
|
||||
BIN
app_alit_print
BIN
app_alit_print
Binary file not shown.
BIN
app_alit_verbose
BIN
app_alit_verbose
Binary file not shown.
BIN
app_dep_tree_py
BIN
app_dep_tree_py
Binary file not shown.
Binary file not shown.
BIN
app_gc_smoke
BIN
app_gc_smoke
Binary file not shown.
BIN
app_ll_esc_fix
BIN
app_ll_esc_fix
Binary file not shown.
BIN
app_ll_verify
BIN
app_ll_verify
Binary file not shown.
BIN
app_llvm_guide
BIN
app_llvm_guide
Binary file not shown.
BIN
app_llvm_test
BIN
app_llvm_test
Binary file not shown.
BIN
app_llvmlite_esc
BIN
app_llvmlite_esc
Binary file not shown.
BIN
app_loop_cf
BIN
app_loop_cf
Binary file not shown.
BIN
app_loop_vmap
BIN
app_loop_vmap
Binary file not shown.
BIN
app_min_str
BIN
app_min_str
Binary file not shown.
BIN
app_min_str_fix
BIN
app_min_str_fix
Binary file not shown.
BIN
app_mlit_verbose
BIN
app_mlit_verbose
Binary file not shown.
BIN
app_par_esc
BIN
app_par_esc
Binary file not shown.
Binary file not shown.
BIN
app_parity_esc10
BIN
app_parity_esc10
Binary file not shown.
BIN
app_parity_esc11
BIN
app_parity_esc11
Binary file not shown.
BIN
app_parity_esc2
BIN
app_parity_esc2
Binary file not shown.
BIN
app_parity_esc3
BIN
app_parity_esc3
Binary file not shown.
BIN
app_parity_esc4
BIN
app_parity_esc4
Binary file not shown.
BIN
app_parity_esc5
BIN
app_parity_esc5
Binary file not shown.
BIN
app_parity_esc6
BIN
app_parity_esc6
Binary file not shown.
BIN
app_parity_esc7
BIN
app_parity_esc7
Binary file not shown.
BIN
app_parity_esc8
BIN
app_parity_esc8
Binary file not shown.
BIN
app_parity_esc9
BIN
app_parity_esc9
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
app_parity_main
BIN
app_parity_main
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
app_pyvm_cmp
BIN
app_pyvm_cmp
Binary file not shown.
BIN
app_stage3_loop
BIN
app_stage3_loop
Binary file not shown.
BIN
app_strlen
BIN
app_strlen
Binary file not shown.
@ -1,37 +0,0 @@
|
||||
feat: MIR Call命令統一Phase 3.3完了 - BoxCall統一実装
|
||||
|
||||
## 実装内容
|
||||
- emit_box_or_plugin_call関数に統一Call対応を追加
|
||||
- NYASH_MIR_UNIFIED_CALL=1で段階的移行可能
|
||||
- BoxCallをCallTarget::Methodとして統一Call化
|
||||
|
||||
## 技術詳細
|
||||
- src/mir/builder/utils.rs: emit_box_or_plugin_call修正
|
||||
- Box型推論ロジックを追加(value_origin_newbox/value_types参照)
|
||||
- emit_unified_callメソッドを使用してMethod呼び出しを生成
|
||||
- 環境変数による新旧実装の切り替え機能実装
|
||||
|
||||
## MIR出力の変化
|
||||
Before (BoxCall命令):
|
||||
```
|
||||
call %1.upper()
|
||||
call %3.push(%4)
|
||||
```
|
||||
|
||||
After (統一Call命令):
|
||||
```
|
||||
call_method StringBox.upper() [recv: %1]
|
||||
call_method ArrayBox.push(%4) [recv: %3]
|
||||
```
|
||||
|
||||
## Phase 3進捗
|
||||
- Phase 3.1: ✅ indirect call統一
|
||||
- Phase 3.2: ✅ print/基本関数統一
|
||||
- Phase 3.3: ✅ BoxCall統一(本コミット)
|
||||
- Phase 3.4: 次ステップ(Python LLVM統一)
|
||||
|
||||
ChatGPT5 Pro A++設計による段階的移行戦略の一環として実装。
|
||||
後方互換性を保ちながら、26%のコード削減を目指す。
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
@ -1,31 +0,0 @@
|
||||
feat: Python LLVM統一MirCall処理基盤実装(Phase 3.4)
|
||||
|
||||
## 実装内容
|
||||
- Python LLVM向け統一MirCallハンドラ実装
|
||||
- instruction_lower.pyに統一分岐追加
|
||||
- 環境変数による段階的移行サポート
|
||||
|
||||
## 新規ファイル
|
||||
- src/llvm_py/instructions/mir_call.py
|
||||
- 6種類のCalleeパターン対応(Global/Method/Constructor/Closure/Value/Extern)
|
||||
- 既存のlower_call/boxcall/externcall等を内部で再利用
|
||||
- NYASH_MIR_UNIFIED_CALL=1で有効化
|
||||
|
||||
## 変更ファイル
|
||||
- src/llvm_py/builders/instruction_lower.py
|
||||
- `op == "mir_call"`の統一分岐を追加
|
||||
- 既存の個別処理との互換性維持
|
||||
|
||||
## 技術詳細
|
||||
ChatGPT5 Pro A++設計による統一Call命令実装の第2段階。
|
||||
Python LLVM側で6種類のCall系命令を1つのmir_call処理に集約。
|
||||
これにより約800行(instructions/内の3ファイル)の削減準備が完了。
|
||||
|
||||
## 次のステップ
|
||||
- Phase 3.5: Rust側のJSON出力対応
|
||||
- Phase 4: 旧実装の削除とリファクタリング
|
||||
|
||||
Phase 15セルフホスティング目標(80k→20k行)への重要な一歩。
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
@ -167,9 +167,7 @@ fn run_harness_in(harness: &Path, input: &Path, out: &Path) -> Result<()> {
|
||||
.arg("--out")
|
||||
.arg(out);
|
||||
propagate_opt_level(&mut cmd);
|
||||
let status = cmd
|
||||
.status()
|
||||
.context("failed to execute python harness")?;
|
||||
let status = cmd.status().context("failed to execute python harness")?;
|
||||
if !status.success() {
|
||||
bail!("harness exited with status: {:?}", status.code());
|
||||
}
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
# Moved: Merge Strategy — branches
|
||||
|
||||
このドキュメントは移動しました。
|
||||
- 新しい場所: [development/engineering/merge-strategy.md](development/engineering/merge-strategy.md)
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
# Moved: CURRENT_TASK
|
||||
|
||||
このファイルは移動しました。最新の現在タスクは次を参照してください。
|
||||
|
||||
- 新しい場所: [リポジトリ直下の CURRENT_TASK.md](../CURRENT_TASK.md)
|
||||
|
||||
補足: Phase 15 以降はルートの `CURRENT_TASK.md` が正本です。`docs/development/current/` 配下の旧ファイルは参照しないでください。
|
||||
@ -1,5 +0,0 @@
|
||||
# Moved: Developer Quickstart
|
||||
|
||||
このドキュメントは移動しました。
|
||||
- 新しい場所: [guides/build/dev-quickstart.md](guides/build/dev-quickstart.md)
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
# Moved: Docs Reorganization Plan
|
||||
|
||||
このドキュメントは移動しました。
|
||||
- 新しい場所: [development/cleanup/docs-reorg/PLAN.md](development/cleanup/docs-reorg/PLAN.md)
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
# Moved: ExternCall Reference
|
||||
|
||||
このドキュメントは移動しました。
|
||||
- 新しい場所: [reference/plugin-system/externcall.md](reference/plugin-system/externcall.md)
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
# Moved: llvmlite Harness
|
||||
|
||||
このドキュメントは移動しました。
|
||||
- 新しい場所: [reference/architecture/llvm-harness.md](reference/architecture/llvm-harness.md)
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
# Moved: Plugin ABI
|
||||
|
||||
このドキュメントは移動しました。
|
||||
- 新しい場所: [reference/abi/PLUGIN_ABI.md](reference/abi/PLUGIN_ABI.md)
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
# Moved: Reorganization Report
|
||||
|
||||
このドキュメントは移動しました。
|
||||
- 新しい場所: [development/cleanup/docs-reorg/REPORT.md](development/cleanup/docs-reorg/REPORT.md)
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
# Moved: Nyash VM Guide
|
||||
|
||||
このドキュメントは移動しました。
|
||||
- 新しい場所: [reference/architecture/vm.md](reference/architecture/vm.md)
|
||||
|
||||
@ -107,7 +107,7 @@ MirInstruction::NewBox { dst, box_type, args } // Box生成
|
||||
- ✅ **WASM CLI**: `./target/release/nyash --compile-wasm program.nyash` で動作
|
||||
- ✅ **ブラウザテスト**: `wasm_demo/` ディレクトリに実行環境完備
|
||||
- ✅ **Safepoint対応**: `src/backend/wasm/codegen.rs:line XX` で実装済み
|
||||
- ✅ **実行ドキュメント**: `docs/execution-backends.md` で使用方法詳細化
|
||||
- ✅ **実行ドキュメント**: `docs/reference/architecture/execution-backends.md` で使用方法詳細化
|
||||
|
||||
### AST→MIR制約への対応
|
||||
現在AST→MIRは基本構文のみ対応(ユーザー定義Box未対応)。本Phaseでは:
|
||||
|
||||
@ -159,7 +159,7 @@ fn main() {
|
||||
## 📖 References
|
||||
- docs/予定/native-plan/copilot_issues.txt(Phase 9詳細)
|
||||
- docs/予定/ai_conference_native_compilation_20250814.md(AI大会議決定)
|
||||
- docs/execution-backends.md(WASM基盤情報)
|
||||
- docs/reference/architecture/execution-backends.md(WASM基盤情報)
|
||||
- [wasmtime compile documentation](https://docs.wasmtime.dev/cli-cache.html)
|
||||
|
||||
---
|
||||
|
||||
41
docs/development/architecture/phi-entry-in-hako.md
Normal file
41
docs/development/architecture/phi-entry-in-hako.md
Normal file
@ -0,0 +1,41 @@
|
||||
Phi Entry in Hako — Design Notes (SSA/CFG Parity)
|
||||
|
||||
Purpose
|
||||
- Specify how to implement SSA φ (phi) on the Hakorune side cleanly, mirroring Rust/Core invariants while keeping the code small and testable.
|
||||
|
||||
Rust/Core invariants to adopt (parity)
|
||||
- Placement: φ nodes are considered at the head of a block (grouped), applied once at block entry.
|
||||
- Selection: choose one incoming (value, pred) where pred == prev_bb (the block we arrived from).
|
||||
- Coverage: incoming pairs cover all reachable predecessors. Missing entries are a hard error in strict mode.
|
||||
- Execution: after φ application, the resulting dst registers are defined before any instruction in the block reads them.
|
||||
|
||||
Hako design (Reader → IR → Runner)
|
||||
- Reader (JsonV1ReaderBox, extended):
|
||||
- Parse MIR JSON v1 into a minimal per-function IR: blocks (id, insts[]), and extract φ entries into a phi_table (block_id → [(dst, [(pred,val)])]).
|
||||
- Keep scanning light by using JsonFragBox helpers (read_int_from/after, seek_array_end, scan_string_end).
|
||||
- PhiTable (V1PhiTableBox):
|
||||
- API: apply_at_entry(regs, phi_table, prev_bb, block_id, policy) → writes dst from the matched incoming.
|
||||
- policy.strict (default ON): fail-fast when incoming is missing or source is undefined; policy.tolerate_void (dev) treats missing/undefined as Void/0.
|
||||
- Runner (NyVmDispatcherV1Box):
|
||||
- On block entry: apply φ via PhiTable; then run instructions (φ removed from the runtime loop).
|
||||
- Branch/jump update prev_bb and bb; compare/branch read the compare.dst as the condition value.
|
||||
|
||||
Flags
|
||||
- HAKO_V1_PHI_STRICT=1 (default), HAKO_V1_PHI_TOLERATE_VOID=0 (dev-only safety).
|
||||
- HAKO_V1_DISPATCHER_FLOW=1 to run the IR-based flow; keep fallback to Mini-VM and Core for stability during bring-up.
|
||||
|
||||
Testing plan
|
||||
- Canary 1: simple if (then/else with single incoming) → ret of φ.dst equals the selected value.
|
||||
- Canary 2: multi-incoming with (pred,val) pairs for both paths; ensure prev_bb select works for both branches.
|
||||
- Canary 3: nested branch (entry φ in deeper block).
|
||||
- Negative: missing incoming for reachable pred → strict fail; tolerate_void → rc stable with Void/0.
|
||||
|
||||
Why this works in Hako
|
||||
- Although Hako doesn’t have first-class structs, the minimal IR and phi_table can be represented as arrays of tuples or MiniMap-backed strings with helper boxes.
|
||||
- JsonFragBox provides escape-aware scanning; Reader avoids brittle substring logic.
|
||||
- Runner remains small and composable: “read/apply/run” with φ isolated at entry.
|
||||
|
||||
Migration plan
|
||||
- Phase 20.37: introduce Reader+PhiTable+entry-apply (flagged), keep fallback to Mini-VM/Core.
|
||||
- Phase 20.38+: expand coverage (binop/compare edges), flip v1 verify default to Hako when parity canaries are green.
|
||||
|
||||
442
docs/development/cleanup/CLEANUP_PLAN_2025-11-04.md
Normal file
442
docs/development/cleanup/CLEANUP_PLAN_2025-11-04.md
Normal file
@ -0,0 +1,442 @@
|
||||
# 🧹 プロジェクト大掃除計画 2025-11-04
|
||||
|
||||
**作成日**: 2025-11-04
|
||||
**作成者**: Claude Code
|
||||
**対象**: プロジェクトルート + docsフォルダ
|
||||
|
||||
---
|
||||
|
||||
## 📊 現状分析サマリー
|
||||
|
||||
### 🚨 深刻な問題
|
||||
- **プロジェクトルート**: 55個の不要バイナリファイル(100MB以上)
|
||||
- **docs/トップレベル**: 12個のリダイレクト専用ファイル(検索ノイズ)
|
||||
- **重複ドキュメント**: CURRENT_TASK系3ファイル、CODEX_QUESTION系2ファイル
|
||||
|
||||
### 📈 統計
|
||||
```
|
||||
プロジェクトルート不要ファイル: 70+個
|
||||
docs/ Markdownファイル総数: 1,632個
|
||||
docs/ サイズ: 35MB
|
||||
├── private/: 21MB (適切)
|
||||
├── archive/: 8.9MB (適切)
|
||||
└── development/: 4.6MB (適切)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 お掃除計画(3段階)
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Phase 1: 即削除(安全確認済み)
|
||||
|
||||
### 1-A. バイナリファイル削除(55個)
|
||||
|
||||
**削除対象**:
|
||||
```bash
|
||||
./app* # 55個のビルド成果物
|
||||
./__mir_builder_out.o # オブジェクトファイル
|
||||
```
|
||||
|
||||
**削除コマンド**:
|
||||
```bash
|
||||
# 安全確認(正式な実行ファイルがあることを確認)
|
||||
ls -lh target/release/nyash target/release/hakorune
|
||||
|
||||
# 削除実行
|
||||
rm -f ./app* ./__mir_builder_out.o
|
||||
|
||||
# 確認
|
||||
ls -1 . | grep -E '^app|\.o$' | wc -l # → 0になるはず
|
||||
```
|
||||
|
||||
**削減効果**: 約100MB削減
|
||||
|
||||
**リスク**: なし(cargo buildで再生成可能)
|
||||
|
||||
---
|
||||
|
||||
### 1-B. 一時commitメッセージファイル削除
|
||||
|
||||
**削除対象**:
|
||||
```bash
|
||||
./commit_message.txt
|
||||
./commit_message2.txt
|
||||
```
|
||||
|
||||
**削除コマンド**:
|
||||
```bash
|
||||
rm -f ./commit_message.txt ./commit_message2.txt
|
||||
```
|
||||
|
||||
**削減効果**: 数KB
|
||||
|
||||
**リスク**: なし(git履歴に残っている)
|
||||
|
||||
---
|
||||
|
||||
### 1-C. docs/リダイレクト専用ファイル削除(11個)
|
||||
|
||||
**削除対象**: すべて「Moved: ...」のみのファイル
|
||||
```
|
||||
docs/CONTRIBUTING-MERGE.md
|
||||
docs/DEV_QUICKSTART.md
|
||||
docs/EXTERNCALL.md
|
||||
docs/LLVM_HARNESS.md
|
||||
docs/PLUGIN_ABI.md
|
||||
docs/VM_README.md
|
||||
docs/CURRENT_TASK.md
|
||||
docs/DOCUMENTATION_REORGANIZATION_PLAN.md
|
||||
docs/REORGANIZATION_REPORT.md
|
||||
docs/execution-backends.md
|
||||
docs/refactor-roadmap.md
|
||||
```
|
||||
|
||||
**事前確認(重要!)**:
|
||||
```bash
|
||||
# これらへのリンクがないか確認
|
||||
for file in CONTRIBUTING-MERGE DEV_QUICKSTART EXTERNCALL LLVM_HARNESS PLUGIN_ABI VM_README CURRENT_TASK DOCUMENTATION_REORGANIZATION_PLAN REORGANIZATION_REPORT execution-backends refactor-roadmap; do
|
||||
echo "=== Checking docs/$file.md ==="
|
||||
grep -r "docs/$file\.md" . --include="*.md" 2>/dev/null | grep -v "^docs/$file.md:" || echo " No references found"
|
||||
done
|
||||
```
|
||||
|
||||
**削除コマンド**:
|
||||
```bash
|
||||
cd docs/
|
||||
rm -f CONTRIBUTING-MERGE.md DEV_QUICKSTART.md EXTERNCALL.md LLVM_HARNESS.md \
|
||||
PLUGIN_ABI.md VM_README.md CURRENT_TASK.md \
|
||||
DOCUMENTATION_REORGANIZATION_PLAN.md REORGANIZATION_REPORT.md \
|
||||
execution-backends.md refactor-roadmap.md
|
||||
cd ..
|
||||
```
|
||||
|
||||
**削減効果**: ノイズ削減(検索結果がクリーンに)
|
||||
|
||||
**リスク**: 低(リンク確認済みなら安全)
|
||||
|
||||
---
|
||||
|
||||
## 🟡 Phase 2: 整理・統合(要判断)
|
||||
|
||||
### 2-A. CURRENT_TASK系の整理
|
||||
|
||||
**現状**:
|
||||
```
|
||||
./CURRENT_TASK.md ← 最新(保持)
|
||||
./CURRENT_TASK_ARCHIVE_2025-09-27.md ← アーカイブ(移動)
|
||||
./CURRENT_TASK_restored.md ← 古いバックアップ(削除)
|
||||
docs/development/current_task_archive/CURRENT_TASK_2025-09-27.md ← 重複
|
||||
```
|
||||
|
||||
**推奨アクション**:
|
||||
```bash
|
||||
# 1. restored版を削除(古いバックアップ)
|
||||
rm -f ./CURRENT_TASK_restored.md
|
||||
|
||||
# 2. アーカイブ版をdocs/development/archive/に統一
|
||||
mv ./CURRENT_TASK_ARCHIVE_2025-09-27.md \
|
||||
docs/development/archive/current_task/CURRENT_TASK_ARCHIVE_2025-09-27.md
|
||||
|
||||
# 3. 重複チェック
|
||||
ls -lh docs/development/current_task_archive/CURRENT_TASK_2025-09-27.md \
|
||||
docs/development/archive/current_task/CURRENT_TASK_2025-09-27.md
|
||||
# → 重複なら片方削除
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2-B. CODEX_QUESTION系の整理
|
||||
|
||||
**現状**:
|
||||
```
|
||||
./CODEX_QUESTION.md ← 最新(保持)
|
||||
./CODEX_QUESTION_backup.md ← バックアップ(削除推奨)
|
||||
```
|
||||
|
||||
**推奨アクション**:
|
||||
```bash
|
||||
# バックアップ版を削除
|
||||
rm -f ./CODEX_QUESTION_backup.md
|
||||
```
|
||||
|
||||
**理由**: git履歴があるのでバックアップ不要
|
||||
|
||||
---
|
||||
|
||||
### 2-C. 古いレポートの移動
|
||||
|
||||
**移動対象**:
|
||||
```
|
||||
./REFACTORING_ANALYSIS_REPORT.md
|
||||
./analysis_report.md
|
||||
```
|
||||
|
||||
**推奨アクション**:
|
||||
```bash
|
||||
# docs/archive/reports/に移動
|
||||
mkdir -p docs/archive/reports/
|
||||
mv ./REFACTORING_ANALYSIS_REPORT.md ./analysis_report.md docs/archive/reports/
|
||||
|
||||
# READMEに記録
|
||||
cat >> docs/archive/reports/README.md <<'EOF'
|
||||
# Archived Reports
|
||||
|
||||
- REFACTORING_ANALYSIS_REPORT.md: 古いリファクタリング分析(2025-09前)
|
||||
- analysis_report.md: 古い分析レポート(2025-09前)
|
||||
|
||||
これらは歴史的記録として保持。最新の分析は docs/development/ を参照。
|
||||
EOF
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🟢 Phase 3: 検討・要確認
|
||||
|
||||
### 3-A. AGENTS.md の扱い
|
||||
|
||||
**現状**: 508行、Codex用の人格定義+開発原則
|
||||
|
||||
**内容分析**:
|
||||
- L1-14: Codex用人格設定(みらいちゃん設定)
|
||||
- L15-508: 開発原則・構造設計指針(普遍的内容)
|
||||
|
||||
**推奨アクション** (3択):
|
||||
|
||||
#### 選択肢A: 分割(推奨)
|
||||
```bash
|
||||
# 1. 開発原則部分を docs/development/philosophy/DEVELOPMENT_PRINCIPLES.md に抽出
|
||||
# 2. AGENTS.md は人格設定のみに縮小(100行以下)
|
||||
# 3. CLAUDE.md から DEVELOPMENT_PRINCIPLES.md へリンク
|
||||
```
|
||||
|
||||
**メリット**: 検索性向上、開発原則が独立文書に
|
||||
|
||||
#### 選択肢B: 保持(現状維持)
|
||||
```bash
|
||||
# そのまま保持
|
||||
```
|
||||
|
||||
**メリット**: Codex用設定が一箇所に集約
|
||||
|
||||
#### 選択肢C: 非表示化
|
||||
```bash
|
||||
# .claude/ に移動(Claude Code検索対象外)
|
||||
mv AGENTS.md .claude/AGENTS.md
|
||||
```
|
||||
|
||||
**メリット**: ルートがすっきり、Codexからは参照可能
|
||||
|
||||
**判断基準**: ユーザーに確認
|
||||
|
||||
---
|
||||
|
||||
### 3-B. CHANGELOG.md の扱い
|
||||
|
||||
**現状**: 28行、最終更新2025-09-11(Phase 15)
|
||||
|
||||
**内容**:
|
||||
- 2025-09-06: Core-13 flip
|
||||
- 2025-09-04: Phase 12.7完了
|
||||
- 2025-09-03: ABI TypeBox統合
|
||||
- 2025-09-11: Phase 15開始
|
||||
|
||||
**問題点**:
|
||||
- Phase 20.38まで進んでいるのに更新なし
|
||||
- 「Work in progress」のまま放置
|
||||
|
||||
**推奨アクション** (2択):
|
||||
|
||||
#### 選択肢A: 廃止してREADME.mdに統合
|
||||
```bash
|
||||
# 1. 重要マイルストーンのみREADME.mdに記載
|
||||
# 2. CHANGELOG.mdを削除
|
||||
# 3. 詳細はgit logとdocs/development/roadmap/phases/で管理
|
||||
```
|
||||
|
||||
**メリット**: メンテナンス負荷削減
|
||||
|
||||
#### 選択肢B: 自動生成化
|
||||
```bash
|
||||
# git logから自動生成するスクリプト作成
|
||||
# tools/generate_changelog.sh
|
||||
```
|
||||
|
||||
**メリット**: 正確性担保
|
||||
|
||||
**判断基準**: ユーザーに確認
|
||||
|
||||
---
|
||||
|
||||
### 3-C. paper_review_prompts.md の扱い
|
||||
|
||||
**現状**: 76行、Gemini/Codex向け論文レビュー用プロンプト集
|
||||
|
||||
**内容**:
|
||||
- MIR13論文レビュー用プロンプト
|
||||
- Nyash言語論文レビュー用プロンプト
|
||||
- 統合的レビュー用タスク
|
||||
|
||||
**推奨アクション** (2択):
|
||||
|
||||
#### 選択肢A: docs/private/papers/に移動
|
||||
```bash
|
||||
mv paper_review_prompts.md docs/private/papers/REVIEW_PROMPTS.md
|
||||
```
|
||||
|
||||
**メリット**: 論文関連が一箇所に集約
|
||||
|
||||
#### 選択肢B: 保持(現状維持)
|
||||
```bash
|
||||
# ルートに保持(頻繁に使うツールとして)
|
||||
```
|
||||
|
||||
**メリット**: アクセスしやすい
|
||||
|
||||
**判断基準**: 使用頻度次第
|
||||
|
||||
---
|
||||
|
||||
## 📋 実行チェックリスト
|
||||
|
||||
### ✅ Phase 1(即実行可能)
|
||||
|
||||
```bash
|
||||
# 1. バイナリファイル削除
|
||||
[ ] 正式実行ファイル存在確認
|
||||
ls -lh target/release/nyash target/release/hakorune
|
||||
[ ] 削除実行
|
||||
rm -f ./app* ./__mir_builder_out.o
|
||||
[ ] 削除確認
|
||||
ls -1 . | grep -E '^app|\.o$' | wc -l # → 0
|
||||
|
||||
# 2. 一時commitメッセージ削除
|
||||
[ ] rm -f ./commit_message.txt ./commit_message2.txt
|
||||
|
||||
# 3. docs/リダイレクト削除
|
||||
[ ] リンク確認実行(上記コマンド)
|
||||
[ ] リンクなし確認後、削除実行
|
||||
```
|
||||
|
||||
**削減効果**: 約100MB + ノイズ削減
|
||||
|
||||
---
|
||||
|
||||
### ⚠️ Phase 2(要判断)
|
||||
|
||||
```bash
|
||||
# 1. CURRENT_TASK系整理
|
||||
[ ] CURRENT_TASK_restored.md 削除確認
|
||||
[ ] アーカイブ統一先確認
|
||||
[ ] 実行
|
||||
|
||||
# 2. CODEX_QUESTION系整理
|
||||
[ ] バックアップ削除確認
|
||||
[ ] 実行
|
||||
|
||||
# 3. 古いレポート移動
|
||||
[ ] 移動先フォルダ作成
|
||||
[ ] README.md作成
|
||||
[ ] 実行
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🤔 Phase 3(ユーザー確認必要)
|
||||
|
||||
```bash
|
||||
# 1. AGENTS.md
|
||||
[ ] 選択肢を提示してユーザー確認
|
||||
A: 分割(推奨)
|
||||
B: 保持
|
||||
C: 非表示化
|
||||
|
||||
# 2. CHANGELOG.md
|
||||
[ ] 選択肢を提示してユーザー確認
|
||||
A: 廃止+README.md統合
|
||||
B: 自動生成化
|
||||
|
||||
# 3. paper_review_prompts.md
|
||||
[ ] 選択肢を提示してユーザー確認
|
||||
A: docs/private/papers/に移動
|
||||
B: 保持
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 期待効果
|
||||
|
||||
### 削減効果
|
||||
- **容量削減**: 約100MB
|
||||
- **ファイル削減**: 約80個
|
||||
- **検索ノイズ削減**: リダイレクト11個削除
|
||||
|
||||
### 改善効果
|
||||
- ルートディレクトリのクリーン化
|
||||
- docs/検索結果の改善
|
||||
- 重複ドキュメント解消
|
||||
- アーカイブ構造の整理
|
||||
|
||||
---
|
||||
|
||||
## 🚨 リスク管理
|
||||
|
||||
### Phase 1(低リスク)
|
||||
- バイナリは再生成可能
|
||||
- リダイレクトはリンク確認済み
|
||||
- git履歴で復元可能
|
||||
|
||||
### Phase 2(中リスク)
|
||||
- アーカイブ移動前にバックアップ推奨
|
||||
- 重複確認を慎重に
|
||||
|
||||
### Phase 3(要確認)
|
||||
- ユーザー確認必須
|
||||
- 誤削除防止のため慎重判断
|
||||
|
||||
---
|
||||
|
||||
## 📝 実行記録テンプレート
|
||||
|
||||
```bash
|
||||
# 実行日時: YYYY-MM-DD HH:MM
|
||||
# 実行者:
|
||||
|
||||
## Phase 1
|
||||
- [ ] バイナリ削除完了 (削減: XXX MB)
|
||||
- [ ] commit message削除完了
|
||||
- [ ] docs/リダイレクト削除完了
|
||||
|
||||
## Phase 2
|
||||
- [ ] CURRENT_TASK系整理完了
|
||||
- [ ] CODEX_QUESTION系整理完了
|
||||
- [ ] 古いレポート移動完了
|
||||
|
||||
## Phase 3
|
||||
- [ ] AGENTS.md: [選択肢] 実行完了
|
||||
- [ ] CHANGELOG.md: [選択肢] 実行完了
|
||||
- [ ] paper_review_prompts.md: [選択肢] 実行完了
|
||||
|
||||
## 最終確認
|
||||
- [ ] ビルド成功確認 (cargo build --release)
|
||||
- [ ] テスト成功確認 (tools/smokes/v2/run.sh --profile quick)
|
||||
- [ ] git status確認
|
||||
- [ ] コミット作成
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 まとめ
|
||||
|
||||
この計画により:
|
||||
- ✅ プロジェクトルートが大幅にクリーン化
|
||||
- ✅ docs/検索性が向上
|
||||
- ✅ 重複ドキュメント解消
|
||||
- ✅ 約100MB容量削減
|
||||
|
||||
**推奨実行順序**: Phase 1 → Phase 2 → Phase 3(ユーザー確認後)
|
||||
|
||||
---
|
||||
|
||||
**次のステップ**: ユーザーに確認を取り、Phase 1から実行開始!
|
||||
243
docs/development/cleanup/CLEANUP_REPORT_2025-11-04.md
Normal file
243
docs/development/cleanup/CLEANUP_REPORT_2025-11-04.md
Normal file
@ -0,0 +1,243 @@
|
||||
# 🧹 プロジェクト大掃除実行レポート 2025-11-04
|
||||
|
||||
**実行日時**: 2025-11-04 16:25
|
||||
**実行者**: Claude Code
|
||||
**計画書**: [CLEANUP_PLAN_2025-11-04.md](CLEANUP_PLAN_2025-11-04.md)
|
||||
|
||||
---
|
||||
|
||||
## ✅ 実行完了サマリー
|
||||
|
||||
### Phase 1: 即削除(完了)✅
|
||||
|
||||
#### 1-A. バイナリファイル削除
|
||||
- **削除数**: 56個(app* + *.o)
|
||||
- **削減容量**: 約700MB(2.5GB → 1.8GB)
|
||||
- **削除ファイル**:
|
||||
- app, app_alit, app_alit_print, app_alit_verbose, app_async
|
||||
- app_dep_tree_py, app_dep_tree_rust, app_empty, app_gc_smoke
|
||||
- app_len, app_ll_esc_fix, app_ll_verify, app_llvm_guide
|
||||
- app_llvm_test, app_llvmlite_esc, app_loop, app_loop2
|
||||
- app_loop_cf, app_loop_vmap, app_map, app_mg, app_min_str
|
||||
- app_min_str_fix, app_mlit_verbose, app_par_esc
|
||||
- app_parity_* (多数)
|
||||
- __mir_builder_out.o
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 1-B. 一時commitメッセージファイル削除
|
||||
- **削除数**: 2個
|
||||
- **削除ファイル**:
|
||||
- commit_message.txt
|
||||
- commit_message2.txt
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 1-C. docs/リダイレクト専用ファイル削除
|
||||
- **削除数**: 11個
|
||||
- **削除ファイル**:
|
||||
- docs/CONTRIBUTING-MERGE.md
|
||||
- docs/DEV_QUICKSTART.md
|
||||
- docs/EXTERNCALL.md
|
||||
- docs/LLVM_HARNESS.md
|
||||
- docs/PLUGIN_ABI.md
|
||||
- docs/VM_README.md
|
||||
- docs/CURRENT_TASK.md
|
||||
- docs/DOCUMENTATION_REORGANIZATION_PLAN.md
|
||||
- docs/REORGANIZATION_REPORT.md
|
||||
- docs/execution-backends.md
|
||||
- docs/refactor-roadmap.md
|
||||
- **状態**: ✅ 完了
|
||||
- **参照修正**: 15箇所修正完了(詳細後述)
|
||||
|
||||
---
|
||||
|
||||
## 📝 ドキュメント参照修正詳細
|
||||
|
||||
### 修正したファイル一覧
|
||||
|
||||
#### 1. README.md
|
||||
- **修正内容**: `docs/DEV_QUICKSTART.md` → `docs/guides/getting-started.md`
|
||||
- **行数**: L52
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 2. README.ja.md
|
||||
- **修正内容**: `docs/DEV_QUICKSTART.md` → `docs/guides/getting-started.md`
|
||||
- **行数**: L16
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 3. .github/pull_request_template.md
|
||||
- **修正内容**: `docs/CONTRIBUTING-MERGE.md` → `docs/development/engineering/merge-strategy.md`
|
||||
- **行数**: L14
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 4. docs/development/roadmap/phases/00_MASTER_ROADMAP.md
|
||||
- **修正内容**: `docs/CURRENT_TASK.md` → `../../../CURRENT_TASK.md`(相対パス)
|
||||
- **行数**: L263, L297(2箇所)
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 5. docs/development/roadmap/README.md
|
||||
- **修正内容**: `docs/CURRENT_TASK.md` → `../../CURRENT_TASK.md`(相対パス)
|
||||
- **行数**: L25
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 6. docs/development/roadmap/phases/phase-8/phase8.3_wasm_box_operations.md
|
||||
- **修正内容**: `docs/execution-backends.md` → `docs/reference/architecture/execution-backends.md`
|
||||
- **行数**: L110
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 7. docs/development/roadmap/phases/phase-9/phase9_aot_wasm_implementation.md
|
||||
- **修正内容**: `docs/execution-backends.md` → `docs/reference/architecture/execution-backends.md`
|
||||
- **行数**: L162
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 8. docs/archive/phases/phase-8/phase8.3_wasm_box_operations.md
|
||||
- **修正内容**: `docs/execution-backends.md` → `docs/reference/architecture/execution-backends.md`
|
||||
- **行数**: L110
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 9. docs/archive/phases/phase-9/phase9_aot_wasm_implementation.md
|
||||
- **修正内容**: `docs/execution-backends.md` → `docs/reference/architecture/execution-backends.md`
|
||||
- **行数**: L162
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
#### 10. docs/reference/plugin-system/plugin-tester.md
|
||||
- **修正内容**: `docs/CURRENT_TASK.md` → `CURRENT_TASK.md`(リポジトリルート)
|
||||
- **行数**: L148
|
||||
- **状態**: ✅ 完了
|
||||
|
||||
### 修正統計
|
||||
- **修正ファイル数**: 10個
|
||||
- **修正箇所数**: 15箇所
|
||||
- **リンク切れ**: 0件(全て正しいリンクに修正済み)
|
||||
|
||||
---
|
||||
|
||||
## 🧪 検証結果
|
||||
|
||||
### ビルド検証
|
||||
```bash
|
||||
cargo build --release
|
||||
```
|
||||
- **結果**: ✅ 成功
|
||||
- **警告**: 111個(既存のもの、クリーンアップによる新規警告なし)
|
||||
- **コンパイル時間**: 0.35s(インクリメンタル)
|
||||
|
||||
### 実行検証
|
||||
```bash
|
||||
./target/release/hakorune /tmp/cleanup_test.nyash
|
||||
```
|
||||
- **テストコード**: `print("Cleanup test OK!")`
|
||||
- **結果**: ✅ 成功
|
||||
- **出力**: `Cleanup test OK!`
|
||||
|
||||
### Git状態
|
||||
```bash
|
||||
git status --short
|
||||
```
|
||||
- **修正ファイル**: 4個(.md)
|
||||
- **削除ファイル**: 67個(バイナリ56 + 一時ファイル2 + リダイレクト11 - 2重複)
|
||||
- **新規ファイル**: 0個
|
||||
- **競合**: なし
|
||||
|
||||
---
|
||||
|
||||
## 📊 削減効果
|
||||
|
||||
### 容量削減
|
||||
- **削減前**: 2.5GB
|
||||
- **削減後**: 1.8GB
|
||||
- **削減量**: 約700MB(28%削減!)
|
||||
|
||||
### ファイル削減
|
||||
- **削減前**: 約150個(ルート + docs/トップレベル)
|
||||
- **削減後**: 約80個
|
||||
- **削減数**: 約70個(47%削減!)
|
||||
|
||||
### 検索ノイズ削減
|
||||
- **リダイレクトファイル削除**: 11個
|
||||
- **効果**: docs/検索結果がクリーンに、正確なファイルが即座に見つかる
|
||||
|
||||
---
|
||||
|
||||
## 🚀 改善効果
|
||||
|
||||
### 1. プロジェクトルートのクリーン化
|
||||
- ✅ 不要バイナリ56個削除
|
||||
- ✅ 一時ファイル2個削除
|
||||
- ✅ 700MB削減
|
||||
|
||||
### 2. docs/構造の整理
|
||||
- ✅ リダイレクト専用ファイル11個削除
|
||||
- ✅ 全参照を正しいリンクに修正
|
||||
- ✅ 検索ノイズ解消
|
||||
|
||||
### 3. ドキュメント整合性向上
|
||||
- ✅ 15箇所のリンク修正
|
||||
- ✅ リンク切れ0件
|
||||
- ✅ 相対パスで一貫性確保
|
||||
|
||||
---
|
||||
|
||||
## ⏭️ 次のステップ(Phase 2-3)
|
||||
|
||||
### Phase 2: 整理・統合(未実施)
|
||||
以下は計画書に記載済みだが、ユーザー確認後に実施予定:
|
||||
|
||||
1. **CURRENT_TASK系の整理**
|
||||
- CURRENT_TASK_restored.md 削除
|
||||
- CURRENT_TASK_ARCHIVE_2025-09-27.md を docs/development/archive/ に統一
|
||||
|
||||
2. **CODEX_QUESTION系の整理**
|
||||
- CODEX_QUESTION_backup.md 削除
|
||||
|
||||
3. **古いレポートの移動**
|
||||
- REFACTORING_ANALYSIS_REPORT.md → docs/archive/reports/
|
||||
- analysis_report.md → docs/archive/reports/
|
||||
|
||||
### Phase 3: 検討・要確認(ユーザー判断待ち)
|
||||
|
||||
1. **AGENTS.md**(508行)の扱い
|
||||
- 選択肢A: 分割(開発原則を独立文書化)← 推奨
|
||||
- 選択肢B: 保持(現状維持)
|
||||
- 選択肢C: .claude/に移動(非表示化)
|
||||
|
||||
2. **CHANGELOG.md**(28行、更新停止中)の扱い
|
||||
- 選択肢A: 廃止してREADME.mdに統合 ← 推奨
|
||||
- 選択肢B: 自動生成化
|
||||
|
||||
3. **paper_review_prompts.md**(76行)の扱い
|
||||
- 選択肢A: docs/private/papers/に移動 ← 推奨
|
||||
- 選択肢B: 保持(頻繁使用なら)
|
||||
|
||||
---
|
||||
|
||||
## ✨ 成果
|
||||
|
||||
**Phase 1 完全達成!**
|
||||
|
||||
- ✅ バイナリ56個削除(700MB削減)
|
||||
- ✅ 一時ファイル2個削除
|
||||
- ✅ リダイレクト11個削除(検索ノイズ解消)
|
||||
- ✅ ドキュメント参照15箇所修正(リンク切れ0)
|
||||
- ✅ ビルド・実行確認済み(問題なし)
|
||||
- ✅ Git状態クリーン(競合なし)
|
||||
|
||||
**次のアクション**: Phase 2-3をユーザーと相談して実施
|
||||
|
||||
---
|
||||
|
||||
## 📝 技術メモ
|
||||
|
||||
### リダイレクトファイル削除の安全手順
|
||||
1. ✅ 全参照を事前検索(grep -r)
|
||||
2. ✅ 参照を正しいリンクに修正
|
||||
3. ✅ 修正後にリダイレクトファイル削除
|
||||
4. ✅ ビルド・実行検証
|
||||
5. ✅ Git状態確認
|
||||
|
||||
この手順により、**リンク切れ0件**で安全なクリーンアップを実現!
|
||||
|
||||
---
|
||||
|
||||
**完了日時**: 2025-11-04 16:30
|
||||
**総作業時間**: 約30分
|
||||
**品質**: ✅ 全チェック完了、問題なし
|
||||
@ -22,7 +22,7 @@
|
||||
|
||||
### 📋 Copilot作業管理
|
||||
- **[copilot_issues.txt](copilot_issues.txt)** - Copilot様への依頼・課題整理
|
||||
- **協調戦略**: [docs/CURRENT_TASK.md](../CURRENT_TASK.md)内に詳細記載
|
||||
- **協調戦略**: [CURRENT_TASK.md](../../CURRENT_TASK.md)内に詳細記載
|
||||
|
||||
### 🎯 フェーズ別課題
|
||||
- **Phase 8課題**: [native-plan/issues/](native-plan/issues/)
|
||||
|
||||
@ -260,7 +260,7 @@ nyash bid gen --target llvm bid.yaml # AOT用declare生成(LLVM実装時)
|
||||
## 📊 進捗管理・コミュニケーション
|
||||
|
||||
### 🤝 協調開発ルール
|
||||
- ✅ 大きな変更前にはdocs/CURRENT_TASK.mdで情報共有
|
||||
- ✅ 大きな変更前には[CURRENT_TASK.md](../../../CURRENT_TASK.md)で情報共有
|
||||
- ✅ ベンチマーク機能は最優先で維持
|
||||
- ✅ 競合発生時は機能優先度で解決
|
||||
- ✅ AI専門家(Gemini/Codex)の深い考察を活用
|
||||
@ -294,7 +294,7 @@ nyash bid gen --target llvm bid.yaml # AOT用declare生成(LLVM実装時)
|
||||
技術的相談や進捗報告は、以下の方法でお気軽にどうぞ:
|
||||
|
||||
1. 📝 GitHub Issues・Pull Request
|
||||
2. 📋 docs/CURRENT_TASK.md コメント
|
||||
2. 📋 [CURRENT_TASK.md](../../../CURRENT_TASK.md) コメント
|
||||
3. 🤖 AI大会議 (重要な技術決定)
|
||||
4. 💬 コミットメッセージでの進捗共有
|
||||
|
||||
|
||||
@ -107,7 +107,7 @@ MirInstruction::NewBox { dst, box_type, args } // Box生成
|
||||
- ✅ **WASM CLI**: `./target/release/nyash --compile-wasm program.nyash` で動作
|
||||
- ✅ **ブラウザテスト**: `wasm_demo/` ディレクトリに実行環境完備
|
||||
- ✅ **Safepoint対応**: `src/backend/wasm/codegen.rs:line XX` で実装済み
|
||||
- ✅ **実行ドキュメント**: `docs/execution-backends.md` で使用方法詳細化
|
||||
- ✅ **実行ドキュメント**: `docs/reference/architecture/execution-backends.md` で使用方法詳細化
|
||||
|
||||
### AST→MIR制約への対応
|
||||
現在AST→MIRは基本構文のみ対応(ユーザー定義Box未対応)。本Phaseでは:
|
||||
|
||||
@ -159,7 +159,7 @@ fn main() {
|
||||
## 📖 References
|
||||
- docs/予定/native-plan/copilot_issues.txt(Phase 9詳細)
|
||||
- docs/予定/ai_conference_native_compilation_20250814.md(AI大会議決定)
|
||||
- docs/execution-backends.md(WASM基盤情報)
|
||||
- docs/reference/architecture/execution-backends.md(WASM基盤情報)
|
||||
- [wasmtime compile documentation](https://docs.wasmtime.dev/cli-cache.html)
|
||||
|
||||
---
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
# Moved: 実行バックエンド完全ガイド
|
||||
|
||||
このドキュメントは構成再編により移動しました。最新の内容はこちら:
|
||||
|
||||
- 新しい場所: [reference/architecture/execution-backends.md](reference/architecture/execution-backends.md)
|
||||
|
||||
36
docs/guides/c-abi-bridge-v0.md
Normal file
36
docs/guides/c-abi-bridge-v0.md
Normal file
@ -0,0 +1,36 @@
|
||||
# C‑ABI Bridge v0 (Phase 20.38)
|
||||
|
||||
Purpose
|
||||
- Provide a minimal, guarded bridge from Hakorune VM to Rust extern providers without changing behavior.
|
||||
- Keep default OFF; use tags for observability, return empty string to keep rc=0.
|
||||
|
||||
Scope (v0)
|
||||
- Supported names (Extern):
|
||||
- `env.mirbuilder.emit` — program_json → mir_json
|
||||
- `env.codegen.emit_object` — mir_json → object path
|
||||
- Call shapes:
|
||||
- Hako provider: `HakoruneExternProviderBox.get(name, arg)`
|
||||
- Legacy global: `hostbridge.extern_invoke(name, method, [arg])`
|
||||
|
||||
Behavior
|
||||
- When `HAKO_V1_EXTERN_PROVIDER=1` (provider ON):
|
||||
- Hako provider returns empty string (`""`), rc remains 0.
|
||||
- When `HAKO_V1_EXTERN_PROVIDER_C_ABI=1` (C‑ABI tag ON):
|
||||
- Provider prints tags to stderr: `[extern/c-abi:mirbuilder.emit]`, `[extern/c-abi:codegen.emit_object]`.
|
||||
- Return remains empty string (rc=0)。
|
||||
|
||||
Toggles
|
||||
- `HAKO_V1_EXTERN_PROVIDER=1` — enable provider path (default OFF).
|
||||
- `HAKO_V1_EXTERN_PROVIDER_C_ABI=1` — emit C‑ABI tags (default OFF).
|
||||
|
||||
Verify
|
||||
- Use Hakorune primary path (`HAKO_VERIFY_PRIMARY=hakovm`)
|
||||
- Pass JSON via env: `NYASH_VERIFY_JSON`
|
||||
- rc extraction: last numeric line
|
||||
|
||||
Rollback/Disable
|
||||
- Unset `HAKO_V1_EXTERN_PROVIDER` (and `HAKO_V1_EXTERN_PROVIDER_C_ABI`) to restore pure stub behavior.
|
||||
|
||||
Notes
|
||||
- v0 is intentionally minimal and behavior‑preserving. v1 may return real values and propagate errors under flags.
|
||||
|
||||
36
docs/guides/source-extensions.md
Normal file
36
docs/guides/source-extensions.md
Normal file
@ -0,0 +1,36 @@
|
||||
Source Extensions Policy — .nyash vs .hako (Interim)
|
||||
|
||||
Intent
|
||||
- Keep development stable while Hakorune VM (v1 Dispatcher/IR/φ) is brought up.
|
||||
- Avoid cross‑contamination between frontends; converge at MIR.
|
||||
|
||||
Execution Mapping (current)
|
||||
- .nyash → Nyash VM (Rust): NyashParser → MIR → VM. Full runtime/plugins path.
|
||||
- .hako → Hakorune VM (v1): JSON v1 Dispatcher/IR/φ(bring‑up coverage; guarded extern).
|
||||
- verify (MIR v1) → Hakorune primary, Core fallback for diagnosis.
|
||||
|
||||
Resolver/Include/Normalize
|
||||
- Using: unify to text‑merge (merge_prelude_text). AST prelude merge is retired.
|
||||
- Include: language‑level unsupported; quick profile treats include as ERROR. Preinclude is test‑harness only(verify の include fallback は撤去済み)。
|
||||
- Normalize (inline/dev): CRLF→LF, redundant `; }` trimmed, tolerant `local` at line head in Hakorune inline drivers.
|
||||
|
||||
Fail‑Fast Guards
|
||||
- Hako in Nyash VM: rejected by default (Fail‑Fast). Toggle: `HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0` for dev only.
|
||||
- Extern (Hako provider): `HAKO_V1_EXTERN_PROVIDER=1`; optional C‑ABI tag/bridge with `HAKO_V1_EXTERN_PROVIDER_C_ABI=1` (default OFF).
|
||||
|
||||
Why two extensions now?
|
||||
- Same language intent, but different stability constraints at the frontend boundary:
|
||||
- .hako through NyashParser caused parse/timeout/alias issues historically.
|
||||
- We intentionally stopped that path and direct .hako to Hakorune VM while it matures.
|
||||
|
||||
Migration Plan (phased)
|
||||
1) P2: IR iteration complete; φ table robust; dispatcher loop scan‑free; extern canaries PASS without harness shim.
|
||||
2) P3: verify default → Hakorune (Core fallback); document toggles and remove ad‑hoc heuristics.
|
||||
3) Prep: introduce stable Nyash→MIR v1 emit route to feed Hakorune VM when (and if) we want .nyash on hv1.
|
||||
4) Deprecation: warn on `.nyash` (opt‑in), then Fail‑Fast once hv1 parity is sufficient; remove legacy code in a later phase.
|
||||
|
||||
Best Practices (now)
|
||||
- Prefer alias/modules over path using; avoid include in source.
|
||||
- Keep quotes ASCII (`"`); avoid trailing semicolons before `}`.
|
||||
- For verify, pass JSON via env (`NYASH_VERIFY_JSON`) and parse last numeric line as rc.
|
||||
- Inline(-c)ドライバは alias のみで構成(include 不要)。
|
||||
@ -22,6 +22,11 @@ using / include
|
||||
- Prefer `as` aliases for readability. Aliases should be `PascalCase`.
|
||||
- Keep `include` adjacent to `using` group, sorted and one per line.
|
||||
|
||||
String concatenation policy
|
||||
- Avoid using `"" + id` (implicit to-string) when building map/register keys or control values.
|
||||
- Use explicit conversion helpers instead, e.g. `StringHelpers.int_to_str(id)`.
|
||||
- Plain string building for messages or JSON emit is allowed to use `+` for clarity (no key/control impact).
|
||||
|
||||
Naming (conventions for Nyash code)
|
||||
- Boxes (types): `PascalCase` (e.g., `ConsoleBox`, `PathBox`).
|
||||
- Methods/functions: `lowerCamelCase` (e.g., `length`, `substring`, `lastIndexOf`).
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
# Moved: Refactor Roadmap
|
||||
|
||||
このドキュメントは移動しました。
|
||||
- 新しい場所: [development/refactoring/refactor-roadmap.md](development/refactoring/refactor-roadmap.md)
|
||||
|
||||
@ -2,15 +2,15 @@
|
||||
|
||||
**実装状況**: Phase 15.5後に本格実装予定 | 基本ドット記法は実装済み
|
||||
|
||||
Status: Accepted (Runner‑side resolution). Selfhost parser accepts using as no‑op and attaches `meta.usings` for future use.
|
||||
Status: Accepted (Runner‑side resolution). Using is resolved by the Runner; prelude is merged as text (DFS) before parsing/execution.
|
||||
|
||||
> Phase 15.5 指針(いいとこ取り)
|
||||
> - 依存の唯一の真実(SSOT): `nyash.toml` の `[using]`(aliases/packages/paths)
|
||||
> - 実体の合成: テキスト結合は廃止し、AST マージに一本化(曖昧さ根絶)
|
||||
> - プロファイル運用: `NYASH_USING_PROFILE={dev|ci|prod}` で厳格度を段階的に切替
|
||||
> - dev: toml + ファイル内 using を許可(実験/便利)
|
||||
> - ci: toml 優先、ファイル using は警告または限定許可
|
||||
> - prod: toml のみ。ファイル using/path はエラー(追記ガイドを提示)
|
||||
Phase 20.36 更新
|
||||
- 依存の唯一の真実(SSOT): `nyash.toml` の `[using]`(aliases/packages/paths)
|
||||
- 実体の合成は“テキスト統合(merge_prelude_text)”に一本化(AST マージは撤退)
|
||||
- プロファイル運用: `NYASH_USING_PROFILE={dev|ci|prod}` で厳格度を段階的に切替
|
||||
- dev: toml + ファイル内 using を許可(実験/bring‑up)。
|
||||
- ci: toml 優先、ファイル using は警告または限定許可。
|
||||
- prod: toml のみ。ファイル using/path はエラー(追記ガイドを提示)。
|
||||
|
||||
## 🎯 設計思想:Everything has Namespace
|
||||
|
||||
@ -61,15 +61,22 @@ pub enum QualifiedCallee {
|
||||
- **スコープ演算子**: `::global_func`、`Type::static_method`
|
||||
- **厳密解決**: コンパイル時名前空間検証
|
||||
|
||||
Policy
|
||||
Policy(Runner前処理)
|
||||
- Accept `using` lines at the top of the file to declare module namespaces or file imports.
|
||||
- Resolution is performed by the Rust Runner when `NYASH_ENABLE_USING=1`.
|
||||
- 実体の結合は AST マージのみ。テキストの前置き/連結は行わない(レガシー経路は呼び出し側から削除済み)。
|
||||
- 実体の結合はテキスト統合(merge_prelude_text)。AST マージ経路は撤退。
|
||||
- Runner は `nyash.toml` の `[using]` を唯一の真実として参照(prod)。dev/ci は段階的に緩和可能。
|
||||
- Selfhost compiler (Ny→JSON v0) collects using lines and emits `meta.usings` when present. The bridge currently ignores this meta field.
|
||||
- Prelude の中にさらに `using` が含まれている場合は、Runner が再帰的に `using` をストリップしてから AST として取り込みます(入れ子の前処理をサポート)。
|
||||
- パス解決の順序(dev/ci): 呼び出し元ファイルのディレクトリ → `$NYASH_ROOT` → 実行バイナリからのプロジェクトルート推定(target/release/nyash の 3 階層上)→ `nyash.toml` の `[using.paths]`。
|
||||
|
||||
Deprecated: `include`
|
||||
- 言語仕様としてはサポートしない(VM/コンパイラともに受理しない)。
|
||||
- 例外は開発支援用の前処理(preinclude)のみ。実行系や言語仕様の責務ではなく、テストハーネスからフラグで明示的に有効化する。
|
||||
- Flags: `NYASH_PREINCLUDE=1` / `HAKO_PREINCLUDE=1`(既定OFF)
|
||||
- quick プロファイルでは include 依存は既定で SKIP(`SMOKES_INCLUDE_POLICY=skip|warn|error`。順次 ERROR へ移行予定)。
|
||||
- 本番(prod)では using/alias のみを正道に固定。`using "path"` は開発限定(`NYASH_ALLOW_USING_FILE=1`)で運用する。
|
||||
|
||||
## Namespace Resolution (Runner‑side)
|
||||
- Goal: keep IR/VM/JIT untouched. All resolution happens in Runner/Registry.
|
||||
- Default search order (3 stages, deterministic):
|
||||
@ -110,6 +117,12 @@ Notes
|
||||
- Aliases are fully resolved: `using json` first rewrites to `json_native`, then resolves to a concrete path via `[using.json_native]`.
|
||||
- `include` は廃止。代替は `using "./path/to/file.nyash" as Name`。prod では `nyash.toml` への登録が必須。
|
||||
|
||||
Development toggles
|
||||
- Resolution is performed by the Runner when `NYASH_ENABLE_USING=1`(既定ON)。
|
||||
- Prelude は常にテキスト統合(DFS/循環検出/キャッシュ)。`NYASH_USING_AST` は後方互換のために残るが AST マージは行わない。
|
||||
- `NYASH_RESOLVE_TRACE=1` で解決ログ(cache‑hit/候補/未解決)を出力。
|
||||
- 前処理は最小 normalize を適用(CRLF→LF、`}` 直前の冗長 `;` を除去、EOF 改行付加)。prod のコードスタイルに依存しないこと。
|
||||
|
||||
### Dylib autoload (dev guard)
|
||||
- Enable autoload during using resolution: set env `NYASH_USING_DYLIB_AUTOLOAD=1`.
|
||||
- Resolution returns a token `dylib:<path>`; when autoload is on, Runner calls the plugin host to `load_library_direct(lib_name, path, boxes)`.
|
||||
|
||||
@ -145,7 +145,7 @@ TLV(Type-Length-Value)概要(簡易)
|
||||
- 読み出しサイズが0: 書き込み後に `close`→`open(r)` してから `read` を実行しているか確認
|
||||
|
||||
関連ドキュメント
|
||||
- `docs/CURRENT_TASK.md`(現在の進捗)
|
||||
- `CURRENT_TASK.md`(現在の進捗、リポジトリルート)
|
||||
- `docs/予定/native-plan/issues/phase_9_75g_bid_integration_architecture.md`(設計計画)
|
||||
|
||||
備考
|
||||
|
||||
@ -25,6 +25,8 @@ stage1.emitter_box = "stage1/emitter_box.hako"
|
||||
pipeline_v2.flow_entry = "pipeline_v2/flow_entry.hako"
|
||||
pipeline_v2.pipeline = "pipeline_v2/pipeline.hako"
|
||||
pipeline_v2.using_resolver = "pipeline_v2/using_resolver_box.hako"
|
||||
pipeline_v2.emit_return_box = "pipeline_v2/emit_return_box.hako"
|
||||
pipeline_v2.emit_binop_box = "pipeline_v2/emit_binop_box.hako"
|
||||
|
||||
# Builder / SSA / Rewrite (scaffolds)
|
||||
builder.ssa.local = "builder/ssa/local_ssa.hako"
|
||||
@ -35,3 +37,8 @@ builder.rewrite.known = "builder/rewrite/known.hako"
|
||||
|
||||
[dependencies]
|
||||
"selfhost.shared" = "^1.0.0"
|
||||
"selfhost.vm" = "^1.0.0"
|
||||
|
||||
[exports.emit.common]
|
||||
call_emit = "emit/common/call_emit_box.hako"
|
||||
json_emit = "emit/common/json_emit_box.hako"
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
// from Method/ModuleFunction forms to Extern names. MVP is a no-op
|
||||
// placeholder so routing can be tested safely.
|
||||
|
||||
using "lang/src/vm/core/json_v0_reader.hako" as NyVmJsonV0Reader
|
||||
using "lang/src/shared/json/json_cursor.hako" as JsonCursorBox
|
||||
using selfhost.vm.core.json_v0_reader as NyVmJsonV0Reader
|
||||
using selfhost.shared.json.core.json_cursor as JsonCursorBox
|
||||
|
||||
static box CoreExternNormalize {
|
||||
// Normalize entire MIR(JSON v0): ensure entry per function and rewrite
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
// LLVMAotFacadeBox — IR 文字列(JSON v0)をファイルに書き出し、AotBox で compile/link する薄い委譲層
|
||||
using "lang/src/llvm_ir/boxes/builder.hako" as LLVMBuilderBox
|
||||
using selfhost.llvm.ir.LLVMBuilderBox as LLVMBuilderBox
|
||||
// Note: Convenience wrappers build JSON inline to avoid nested resolver issues
|
||||
|
||||
static box LLVMAotFacadeBox {
|
||||
|
||||
@ -5,8 +5,8 @@
|
||||
// - JSON(MIR v0) の軽量正規化(キー順/冗長キー削除)と安全な const/binop(+,-,*)/ret の単一ブロック畳み込み
|
||||
// - 既定ではパススルー(Rust 側 maybe_prepare_mir_json が実体)。段階的にこちらへ移管する
|
||||
|
||||
using "lang/src/shared/mir/mir_io_box.hako" as MirIoBox
|
||||
using "lang/src/shared/common/string_helpers.hako" as StringHelpers
|
||||
using selfhost.shared.mir.io as MirIoBox
|
||||
using selfhost.shared.common.string_helpers as StringHelpers
|
||||
|
||||
static box AotPrepBox {
|
||||
// AotPrepBox.prep
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
// v0_const_binop.hako — LLVM Script Builder v0(const/binop/ret)デモ
|
||||
// 役割: 最小 MIR(JSON v0) を生成し、AotBox 経由で exe を作る(IR構築は段階導入のためMIRビルダーを使用)。
|
||||
|
||||
using "lang/src/compiler/pipeline_v2/emit_return_box.hako" as EmitReturnBox
|
||||
using "lang/src/compiler/pipeline_v2/emit_binop_box.hako" as EmitBinopBox
|
||||
using lang.compiler.pipeline_v2.emit_return_box as EmitReturnBox
|
||||
using lang.compiler.pipeline_v2.emit_binop_box as EmitBinopBox
|
||||
|
||||
static box V0Demo {
|
||||
// 返り値 0 の exe を生成
|
||||
@ -46,4 +46,3 @@ static box Main {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -15,8 +15,8 @@
|
||||
// - JSON 構造生成のみ(LLVM IR 生成は C++ backend が担当)
|
||||
// - Unified architecture(6つの命令を1つに統合)
|
||||
|
||||
using "lang/src/compiler/emit/common/call_emit_box.hako" as CallEmitBox
|
||||
using "lang/src/compiler/emit/common/json_emit_box.hako" as JsonEmitBox
|
||||
using lang.compiler.emit.common.call_emit as CallEmitBox
|
||||
using lang.compiler.emit.common.json_emit as JsonEmitBox
|
||||
|
||||
static box LLVMMirCallInstructionBox {
|
||||
|
||||
|
||||
@ -38,17 +38,12 @@ static box LowerLoopCountParamBox {
|
||||
local step = Scan.read_value_int_after(s, k_step_t)
|
||||
if step == null { return null }
|
||||
|
||||
// Build via LoopFormBox (extend build to accept param init/step in future; use loop_count then adjust by init/step)
|
||||
// For now, synthesize by composing loop_count(limit') with pre-increment of i, but since we return i, we can directly emit param loop
|
||||
// Implement dedicated param path in LoopFormBox: loop_count(limit, init, step)
|
||||
if step == 1 && init == 0 { return LoopFormBox.build("count", limit, null, null) }
|
||||
// Fallback to parametric count when available
|
||||
if ("" + step) != "" || ("" + init) != "" {
|
||||
// Call loop_count(limit) is incorrect when init/step differ; prefer loop_count when extension exists.
|
||||
// Use build("count_param", limit, init, step) when mode supported.
|
||||
local out = LoopFormBox.build("count_param", limit, init, step)
|
||||
if out != null { return out }
|
||||
}
|
||||
return null
|
||||
// Build via LoopFormBox.build2 ({ mode:"count", init, limit, step })
|
||||
local opts = new MapBox()
|
||||
opts.set("mode", "count")
|
||||
opts.set("init", init)
|
||||
opts.set("limit", limit)
|
||||
opts.set("step", step)
|
||||
return LoopFormBox.build2(opts)
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,7 +32,11 @@ static box LowerLoopSimpleBox {
|
||||
if had == 0 { return null }
|
||||
local limit = s.substring(i, j)
|
||||
|
||||
// Delegate to shared loop form builder (counting mode)
|
||||
return LoopFormBox.build("count", limit, null, null)
|
||||
// Delegate to shared loop form builder (counting mode) via build2
|
||||
local opts = new MapBox()
|
||||
opts.set("mode", "count")
|
||||
opts.set("limit", limit)
|
||||
// init/step are optional; default to 0/1 inside LoopFormBox
|
||||
return LoopFormBox.build2(opts)
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,6 +70,12 @@ static box LowerLoopSumBcBox {
|
||||
if skip_value == null { skip_value = 2 }
|
||||
if break_value == null { break_value = limit }
|
||||
|
||||
return LoopFormBox.build("sum_bc", limit, skip_value, break_value)
|
||||
// Use build2 map form for clarity
|
||||
local opts = new MapBox()
|
||||
opts.set("mode", "sum_bc")
|
||||
opts.set("limit", limit)
|
||||
opts.set("skip", skip_value)
|
||||
opts.set("break", break_value)
|
||||
return LoopFormBox.build2(opts)
|
||||
}
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ static box MinMirEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
using "lang/src/shared/common/entry_point_base.hako" as EntryPointBaseBox
|
||||
using selfhost.shared.common.entry_point_base as EntryPointBaseBox
|
||||
|
||||
static box MinMirEmitterMain {
|
||||
main(args) { return EntryPointBaseBox.main(args) }
|
||||
|
||||
@ -5,8 +5,8 @@
|
||||
// Non-responsibility:
|
||||
// - Global MIR rewrites, control-flow changes, or optimizer passes(将来の AotPrepV2 へ)
|
||||
|
||||
using "lang/src/shared/mir/mir_io_box.hako" as MirIoBox
|
||||
using "lang/src/shared/json/json_cursor.hako" as JsonCursorBox
|
||||
using selfhost.shared.mir.io as MirIoBox
|
||||
using selfhost.shared.json.core.json_cursor as JsonCursorBox
|
||||
|
||||
static box AotPrepBox {
|
||||
// Entry: return prepped JSON string
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
// Non-Responsibility:
|
||||
// - Actual inlining logic (to be implemented incrementally)
|
||||
|
||||
using "lang/src/shared/mir/mir_io_box.hako" as MirIoBox
|
||||
using selfhost.shared.mir.io as MirIoBox
|
||||
|
||||
static box MirInlineExpand {
|
||||
// Entry: return (possibly) transformed JSON path; v0 returns input as-is.
|
||||
@ -20,4 +20,3 @@ static box MirInlineExpand {
|
||||
}
|
||||
|
||||
static box MirInlineExpandMain { main(args){ return 0 } }
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
// Responsibility: Provide a thin, stable entry to route MIR(JSON v0)
|
||||
// through the Ny/Core dispatcher when a wrapper route is needed.
|
||||
|
||||
using "lang/src/vm/core/dispatcher.hako" as NyVmDispatcher
|
||||
using selfhost.vm.core.dispatcher as NyVmDispatcher
|
||||
|
||||
static box GateCController {
|
||||
// route_json/1: String(JSON v0) -> String(last line)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user