Files
hakorune/docs/private/roadmap/phases/phase-20.31/PLAN.md

45 lines
2.7 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.

# PLAN — Phase20.31
## 1) LLVM 最適化レベルの統一トグル既定O2
- CLI: `--aot-engine {llvmlite|native}`実装済に加え、ENV による最適化レベル指定を導入/透過。
- ENV: `HAKO_LLVM_OPT_LEVEL=0|1|2|3`alias: `NYASH_LLVM_OPT_LEVEL`
- llvmlite 経路: 環境をハーネスへ透過(未対応でも無害)。
- native 経路: `hako_llvm_set_opt_level(level)` を呼び出す(実装は次フェーズで中身を加える)。
- 代表スモーク:
- O0/O2/O3 で emit→exe→run が PASS。
- O3 でも if/phi の意味論差が出ないことResult 値一致)。
## 2) MIR プリ最適化(安全セット)
- 目的: 意味論を変えずに IR 形状を整え、LLVM に渡る前にノイズを減らす。
- 最小セット(既定 ON、ブロック内のみ
- copy-prop: 単純 copy 連鎖を解消。
- dead-def: 未使用の dst を削除。
- cmp+branch fold: 両辺 const かつ直後に branch/ret なら固定化。
- phi 簡約: 同一入力のみなら copy 化。
- トグル: `HAKO_MIR_OPTS=copy,dead,cmpfold,phi`(未指定は安全セット ON
- スモーク: JSON if-diamond/phi で use-before-def が出ないこと、emit 順序回帰テストの緑維持。
## 3) ユーザーボックス生成birth高速化 — 設計と段階導入
- 問題: 動的フィールド登録/Map 経由の初期化でコスト過大。
- 方針: 形状shapeキャッシュ連続領域確保struct-likeによるファストパスを追加。
- 形状キー: Box 型ID + フィールド順序/型(コンパイル時または初回起動時に確定)。
- 実体: 連続領域に固定レイアウトを確保し、初期値を書き込むだけにする。
- 既存 API は維持(責務は runtime 内部で高速経路に合流)。
- 段階導入(既定 OFF → 観測 → 既定 ON
- ENV: `HAKO_BOX_BIRTH_FAST=1` で有効化(最初は quick 限定で観測)。
- 回帰時は TTL を付与CURRENT_TASK.md に撤去期限を書き、ドキュメント整備)。
## 4) ベンチ/スモーク
- ベンチtools/bench の簡易スクリプト)
- 算術ループ×1e6、ユーザーボックス birth×1e6、Array push/pop×1e6。
- C 版の同等プログラムと比較(最低 3 回、最小値採用)。
- スモーク
- O0/O2/O3 の三点チェック、MIR プリ最適化 ON/OFF で意味論比較。
- birth-fast 有効時と無効時の等価性Result と出力)が一致。
## 5) 受け入れ基準
- 代表ベンチで C の ≥80% を達成。
- quick/integration 緑維持(既定挙動は不変)。
- birth-fast ON の観測で 2 桁% 改善が見られること。