8214176814
feat(perf): add Phase 21.8 foundation for IntArrayCore/MatI64 numeric boxes
...
Prepare infrastructure for specialized numeric array benchmarking:
- Add IntArrayCore plugin stub (crates/nyash_kernel/src/plugin/intarray.rs)
- Add IntArrayCore/MatI64 box definitions (lang/src/runtime/numeric/)
- Add Phase 21.8 documentation and task tracking
- Update nyash.toml/hako.toml with numeric library configuration
- Extend microbench.sh for matmul_core benchmark case
Next: Resolve Stage-B MirBuilder to recognize MatI64/IntArrayCore as boxes
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-14 15:18:14 +09:00
f1fa182a4b
AotPrep collections_hot matmul tuning and bench tweaks
2025-11-14 13:36:20 +09:00
647ee05d06
fix(emit): stabilize Stage-B wrapper with temp file approach
...
Root Cause:
- Subshell CODE expansion became path literal "/cat/tmp/matmul.hako"
- Variable lost in nested subshell with cd command
- All benchmark cases (matmul, arraymap, etc.) failed emit
Solution:
- Temp file approach with trap cleanup (CODE_TMP=$(mktemp))
- 3-tier fallback extraction (Python→awk→ruby)
- Enhanced diagnostics with HAKO_SELFHOST_TRACE=1
- Pre-check SKIP logic in microbench for unstable emit
Changes:
- tools/hakorune_emit_mir.sh
- Temp file approach eliminates subshell variable issues
- extract_program_json now has 3 fallback strategies
- Detailed trace output for debugging
- Variable scope fixes (local → script level)
- tools/perf/microbench.sh
- matmul pre-check with SKIP + diagnostic hint
- Prevents false benchmark results on emit failure
Test Results:
✅ loop: 936 bytes rc=0
✅ call: 330 bytes rc=0
✅ stringchain: 313 bytes rc=0
✅ arraymap: 422 bytes rc=0
✅ matmul: 7731 bytes rc=0 (FIXED!)
✅ CI guard: emit_provider_no_jsonfrag_canary PASS
Impact:
- All benchmark cases now emit MIR successfully
- Stable execution without subshell variable bugs
- Comprehensive diagnostics for future debugging
- Foundation for provider-first optimization
Next: Apply AotPrep to optimize Array/Map hot paths
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-13 22:52:25 +09:00
8b44c5009f
fix(mir): fix else block scope bug - PHI materialization order
...
Root Cause:
- Else blocks were not propagating variable assignments to outer scope
- Bug 1 (if_form.rs): PHI materialization happened before variable_map reset,
causing PHI nodes to be lost
- Bug 2 (phi.rs): Variable merge didn't check if else branch modified variables
Changes:
- src/mir/builder/if_form.rs:93-127
- Reordered: reset variable_map BEFORE materializing PHI nodes
- Now matches then-branch pattern (reset → materialize → execute)
- Applied to both "else" and "no else" branches for consistency
- src/mir/builder/phi.rs:137-154
- Added else_modified_var check to detect variable modifications
- Use modified value from else_var_map_end_opt when available
- Fall back to pre-if value only when truly not modified
Test Results:
✅ Simple block: { x=42 } → 42
✅ If block: if 1 { x=42 } → 42
✅ Else block: if 0 { x=99 } else { x=42 } → 42 (FIXED!)
✅ Stage-B body extraction: "return 42" correctly extracted (was null)
Impact:
- Else block variable assignments now work correctly
- Stage-B compiler body extraction restored
- Selfhost builder path can now function
- Foundation for Phase 21.x progress
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-13 20:16:20 +09:00
dda65b94b7
Phase 21.7 normalization: optimization pre-work + bench harness expansion
...
- Add opt-in optimizations (defaults OFF)
- Ret purity verifier: NYASH_VERIFY_RET_PURITY=1
- strlen FAST enhancement for const handles
- FAST_INT gate for same-BB SSA optimization
- length cache for string literals in llvmlite
- Expand bench harness (tools/perf/microbench.sh)
- Add branch/call/stringchain/arraymap/chip8/kilo cases
- Auto-calculate ratio vs C reference
- Document in benchmarks/README.md
- Compiler health improvements
- Unify PHI insertion to insert_phi_at_head()
- Add NYASH_LLVM_SKIP_BUILD=1 for build reuse
- Runtime & safety enhancements
- Clarify Rust/Hako ownership boundaries
- Strengthen receiver localization (LocalSSA/pin/after-PHIs)
- Stop excessive PluginInvoke→BoxCall rewrites
- Update CURRENT_TASK.md, docs, and canaries
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-13 16:40:58 +09:00
52b62c5772
feat(phase21.5): Stage-B parser loop fix + delegate path stabilization
...
## 修正内容
### 1. Stage-B パーサー修正(偶然の回避)
- **ファイル**:
- `lang/src/compiler/parser/expr/parser_expr_box.hako`
- `lang/src/compiler/parser/stmt/parser_control_box.hako`
- **問題**: ネストループで gpos が正しく進まず、loop の cond/body が壊れる
- **回避策**: new 式のメソッドチェーン処理追加で別ループを導入
- **結果**: MIR 生成が変わって VM gpos バグを回避
### 2. delegate パス動作確認
- **テスト**: `/tmp/loop_min.hako` → rc=10 ✅
- **MIR構造**: 正しい PHI/compare/binop を生成
- **チェーン**: hakorune parser → Rust delegate → LLVM EXE 完動
### 3. ドキュメント追加
- `docs/development/analysis/` - delegate 分析
- `docs/development/guides/` - ループテストガイド
- `docs/development/testing/` - Stage-B 検証報告
### 4. カナリーテスト追加
- `tools/smokes/v2/profiles/quick/core/phase2100/` 配下に複数追加
- emit_boxcall_length_canary_vm.sh
- stageb_parser_loop_json_canary_vm.sh
- 他
### 受け入れ基準
- ✅ delegate パス: rc=10 返す
- ✅ FORCE パス: rc=10 返す(既存)
- ✅ MIR 構造: 正しい PHI incoming と compare
- ✅ 既定挙動: 不変(dev トグルのみ)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-11 21:24:51 +09:00
07a254fc0d
feat(phase21.5): MirBuilder optimization prep + crate EXE infrastructure
...
Phase 21.5 optimization readiness - C-level performance target:
- MirBuilder: JsonFrag purify toggle (HAKO_MIR_BUILDER_JSONFRAG_PURIFY=1)
- Normalizer: extended f64 canonicalization + dedupe improvements
- loop_opts_adapter: JsonFrag path refinement for crate EXE compatibility
Infrastructure improvements:
- provider_registry: add diagnostics + ring-1 providers (array/console/map/path)
- mir_interpreter: add normalization/purify feature gates
- tools/selfhost_exe_stageb.sh: new end-to-end Stage-B→crate EXE pipeline
- tools/perf/microbench.sh: performance measurement tooling
Smoke tests (phase2100):
- Extend timeout 15s→120s for heavy crate EXE builds
- Add stageb_loop_jsonfrag_crate_exe_canary_vm.sh (target test)
- Add s3_backend_selector_crate_exe_vm_parity_return42_canary_vm.sh
Documentation:
- ENV_VARS.md: add Phase 21.5 optimization toggles
- README updates: clarify crate backend strategy
- phase215-optimization.md: new optimization roadmap
This commit sets the stage for Phase 21.5 critical optimization:
achieving C-level performance to decide hakorune's future viability.
2025-11-11 02:07:12 +09:00
6055d53eff
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests
...
Phase 21.5 (AOT/LLVM Optimization Prep)
- FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path
- src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory
- Auto-registers at startup, eliminates fallback panic structurally
- StringBox fast path prototypes (length/size optimization)
- Performance benchmarks (C/Python/Hako comparison baseline)
Phase 22.1 (JsonFrag Unification)
- JsonFrag.last_index_of_from() for backward search (VM fallback)
- Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako
- SentinelExtractorBox for Break/Continue pattern extraction
MirBuilder Refactor (Box → JsonFrag Migration)
- 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly
- MirBuilderMinBox: lightweight using set for dev env
- Registry-only fast path with [registry:*] tag observation
- pattern_util_box.hako: enhanced pattern matching
Dev Environment & Testing
- Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1
- phase2160: registry opt-in tests (array/map get/set/push/len) - content verification
- phase2034: rc-dependent → token grep (grep -F based validation)
- run_quick.sh: fast smoke testing harness
- ENV documentation: docs/ENV_VARS.md
Test Results
✅ quick phase2034: ALL GREEN (MirBuilder internal patterns)
✅ registry phase2160: ALL GREEN (array/map get/set/push/len)
✅ rc-dependent tests → content token verification complete
✅ PREINCLUDE policy: default OFF, point-enable only where needed
Technical Notes
- No INCLUDE by default (maintain minimalism)
- FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles)
- Tag-based route observation ([mirbuilder/min:*], [registry:*])
- MIR structure validation (not just rc parity)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-10 19:42:42 +09:00