diff --git a/docs/development/current/main/phase182-char-comparison-generalization.md b/docs/development/current/main/phase182-char-comparison-generalization.md new file mode 100644 index 00000000..3ab76c8a --- /dev/null +++ b/docs/development/current/main/phase182-char-comparison-generalization.md @@ -0,0 +1,417 @@ +# Phase 182: CharComparison ループの汎用化(設計・命名調整) + +## 概要 + +Phase 171-180 で実装した "Trim" パターンは、実は「特定の文字と比較するループ」の特例である。 +次フェーズ以降、JsonParser などで同様のパターン(例: `ch == '"'`, `ch == ','` など)が出てくる。 + +Phase 182 では、内部的な実装は変えずに、ドキュメント・コメント・型名を +「Trim 専用」から「CharComparison パターン」として一般化する準備をする。 + +## 現在の用語体系 + +### Phase 171-180 での呼称 + +| 用語 | 場所 | 役割 | +|------|------|------| +| TrimLoopHelper | `src/mir/loop_pattern_detection/trim_loop_helper.rs` | Trim パターンの条件生成 | +| TrimPatternInfo | loop_body_carrier_promoter.rs | Trim 昇格検出結果 | +| TrimLoopLowering module | `src/mir/builder/control_flow/joinir/patterns/trim_loop_lowering.rs` | Trim ループ前処理 lowerer | +| TrimPatternLowerer | trim_pattern_lowerer.rs | JoinIR 条件生成(Trim専用) | +| TrimPatternValidator | trim_pattern_validator.rs | Trim パターン構造検証 | +| LoopBodyCarrierPromoter | loop_pattern_detection/ | キャリア昇格検出(汎用) | + +### 将来の呼称(Phase 183+) + +| 用語 | 対応する現在名 | 新しい役割 | +|------|---------------|-----------| +| CharComparisonHelper | TrimLoopHelper | **文字比較ループ**の条件生成(汎用) | +| CharComparisonPatternInfo | TrimPatternInfo | **文字比較パターン**の昇格検出結果 | +| CharComparisonLowering module | TrimLoopLowering module | **文字比較パターン**ループ前処理 lowerer | +| CharComparisonPatternLowerer | TrimPatternLowerer | JoinIR 条件生成(文字比較汎用) | +| CharComparisonPatternValidator | TrimPatternValidator | 文字比較パターン構造検証 | +| LoopBodyCarrierPromoter | (変更なし) | キャリア昇格検出(汎用、変更なし) | + +## 用語一般化の意図 + +### Trim → CharComparison へ + +**Trim パターン**は、以下の構造を持つ: +```nyash +loop(p < s.length()) { + local ch = s.substring(p, p+1) + if ch == ' ' or ch == '\n' { p = p + 1; continue } + break +} +``` + +これは本質的に「**文字比較ループ**」であり、以下のパターンでも同じ構造: + +#### JsonParser: Quote Check +```nyash +loop(p < s.length()) { + local ch = s.substring(p, p+1) + if ch == '"' { break } // 引用符を見つけたら終了 + p = p + 1 +} +``` + +#### JsonParser: Delimiter Check +```nyash +loop(p < s.length()) { + local ch = s.substring(p, p+1) + if ch == ',' or ch == ']' { break } // デリミタを見つけたら終了 + p = p + 1 +} +``` + +#### 汎用の文字比較ループ +```nyash +loop(p < s.length()) { + local ch = s.substring(p, p+1) + if { } + p = p + 1 +} +``` + +**共通点**: +- ループ変数: 文字列インデックス(`p`, `i` など) +- キャリア: LoopBodyLocal の文字変数(`ch`) +- 比較対象: 特定の文字(whitespace, quote, delimiter など) +- アクション: break, continue, または複雑な処理 + +**一般化の価値**: +- Trim は whitespace 比較の特例 +- JsonParser では quote, delimiter, escape 文字など多種類の比較が必要 +- 同じ lowering ロジックで複数のパターンに対応可能 + +## Phase 182 作業内容(コード変更なし) + +### 1. ドキュメント・docstring 更新 + +**対象ファイル群**: +- `src/mir/builder/control_flow/joinir/patterns/trim_loop_lowering.rs` +- `src/mir/builder/control_flow/joinir/patterns/trim_pattern_lowerer.rs` +- `src/mir/builder/control_flow/joinir/patterns/trim_pattern_validator.rs` +- `src/mir/loop_pattern_detection/trim_loop_helper.rs` +- `src/mir/loop_pattern_detection/loop_body_carrier_promoter.rs` +- 各ファイルの crate-level comment + +**更新内容**: + +```rust +// Before +//! Phase 171: Trim pattern detection and lowering for JsonParser + +// After +//! Phase 171+: Character Comparison pattern detection and lowering +//! +//! Initially implemented for Trim pattern (whitespace comparison). +//! Generalized for any character comparison patterns (e.g., quoted string parsing, delimiter matching). +//! +//! ## Examples +//! - Trim: `ch == ' '` (whitespace check) +//! - JsonParser: `ch == '"'` (quote check), `ch == ','` (delimiter check) +//! - CSV Parser: `ch == ','` (delimiter), `ch == '\n'` (line break) +``` + +### 2. 型・関数のコメント更新 + +#### TrimLoopHelper +```rust +// Before +pub struct TrimLoopHelper { ... } + +// After +/// Character comparison loop helper (initially for Trim patterns) +/// +/// Used by loops like: +/// - Trim: `ch == ' '` (whitespace check) +/// - JsonParser: `ch == '"'` (quote check), `ch == ','` (delimiter check) +/// - CSV Parser: `ch == ','` (delimiter), `ch == '\n'` (line break) +/// +/// ## Renaming Plan (Phase 183+) +/// This struct will be renamed to `CharComparisonHelper` in Phase 183. +pub struct TrimLoopHelper { ... } +``` + +#### TrimPatternLowerer +```rust +// Before +pub struct TrimPatternLowerer; + +// After +/// Trim/CharComparison pattern lowerer (JoinIR condition generation) +/// +/// Initially implemented for Trim patterns (whitespace comparison). +/// Generalized for any character comparison patterns. +/// +/// ## Renaming Plan (Phase 183+) +/// This struct will be renamed to `CharComparisonPatternLowerer` in Phase 183. +pub struct TrimPatternLowerer; +``` + +#### TrimPatternValidator +```rust +// Before +pub struct TrimPatternValidator; + +// After +/// Trim/CharComparison pattern validator (structure validation) +/// +/// Validates character comparison loop structure: +/// - LoopBodyLocal carrier (e.g., `ch`) +/// - Character comparison condition (e.g., `ch == ' '`) +/// - Substring pattern detection +/// +/// ## Renaming Plan (Phase 183+) +/// This struct will be renamed to `CharComparisonPatternValidator` in Phase 183. +pub struct TrimPatternValidator; +``` + +### 3. 用語統一の計画メモ + +**Phase 183+ での段階的リネーム**: + +#### Step 1: 型エイリアス追加(互換性維持) +```rust +// Phase 183 +pub type TrimLoopHelper = CharComparisonHelper; +pub type TrimPatternInfo = CharComparisonPatternInfo; + +#[deprecated(note = "Use CharComparisonPatternLowerer instead")] +pub type TrimPatternLowerer = CharComparisonPatternLowerer; +``` + +#### Step 2: ファイル名変更 +``` +src/mir/builder/control_flow/joinir/patterns/ + trim_loop_lowering.rs → char_comparison_lowering.rs + trim_pattern_lowerer.rs → char_comparison_pattern_lowerer.rs + trim_pattern_validator.rs → char_comparison_pattern_validator.rs + +src/mir/loop_pattern_detection/ + trim_loop_helper.rs → char_comparison_helper.rs +``` + +#### Step 3: 旧名の非推奨化 +```rust +#[deprecated(since = "Phase 183", note = "Use CharComparisonHelper instead")] +pub type TrimLoopHelper = CharComparisonHelper; +``` + +#### Step 4: 完全置換(Phase 184+) +- 型エイリアス削除 +- 旧名の完全廃止 +- ドキュメント内の "Trim" → "CharComparison" 一斉置換 + +### 4. 互換性の考慮 + +**段階的リネーム戦略**: +- **Phase 182**: ドキュメント・コメントのみ更新(実装変更なし) +- **Phase 183**: 型エイリアス追加、ファイル名変更、新名称導入 +- **Phase 184**: 旧名削除、完全統一 + +**移行期間**: +- Phase 183-184 の間、旧名と新名を共存させる +- 型エイリアスで互換性維持 +- docstring に `#[deprecated]` マークを付ける + +## 実装例(Phase 183 以降向け) + +### CharComparisonHelper の使用例 + +```rust +// Phase 182: ドキュメント更新のみ(この段階では実装なし) +// +// docstring に記載: +// "This will be renamed to CharComparisonHelper in Phase 183" +// "Initially used for Trim patterns; generalized for any char comparison" + +// Phase 183+: 実装例(参考) +impl CharComparisonHelper { + pub fn new(carrier_name: String, comparison_chars: Vec) -> Self { + // whitespace以外の文字比較にも対応 + Self { + carrier_name, + comparison_chars, + } + } + + pub fn for_trim() -> Self { + // Trim パターン専用ヘルパー(後方互換性) + Self::new("ch".to_string(), vec![" ".to_string(), "\n".to_string(), "\t".to_string()]) + } + + pub fn for_quote_check() -> Self { + // JsonParser 引用符チェック + Self::new("ch".to_string(), vec!["\"".to_string()]) + } + + pub fn for_delimiter_check() -> Self { + // JsonParser デリミタチェック + Self::new("ch".to_string(), vec![",".to_string(), "]".to_string(), "}".to_string()]) + } +} +``` + +## 次フェーズへの提案 + +### Phase 183: 実装・リネーム フェーズ + +**目標**: 型名・ファイル名を実際にリネーム、互換性維持 + +**タスク**: +- [ ] `trim_loop_lowering.rs` → `char_comparison_lowering.rs` リネーム +- [ ] `TrimLoopHelper` → `CharComparisonHelper` リネーム(型エイリアス付き) +- [ ] `TrimPatternLowerer` → `CharComparisonPatternLowerer` リネーム +- [ ] `TrimPatternValidator` → `CharComparisonPatternValidator` リネーム +- [ ] テスト・ドキュメント内の明示的な "Trim" → "CharComparison" 置換 +- [ ] 新規の JsonParser ループ(_parse_string 等)でも同モジュール使用 + +**互換性**: +```rust +// 型エイリアスで旧コード動作保証 +pub type TrimLoopHelper = CharComparisonHelper; +pub type TrimPatternInfo = CharComparisonPatternInfo; + +#[deprecated(note = "Use CharComparisonHelper instead. Will be removed in Phase 184.")] +pub type TrimLoopHelper = CharComparisonHelper; +``` + +### Phase 184+: 完全置換フェーズ + +**目標**: 旧名完全廃止、用語統一完了 + +**タスク**: +- [ ] 型エイリアス削除 +- [ ] 旧名への参照を全て新名に置換 +- [ ] `#[deprecated]` マーク削除 +- [ ] ドキュメント最終確認 + +## Pattern5 (Trim/CharComparison) の拡張性 + +### 現在のサポート範囲 + +**Trim パターン**: +- whitespace 比較(`ch == ' '`, `ch == '\n'`, `ch == '\t'`) +- キャリア: `ch` (LoopBodyLocal) +- アクション: continue(whitespace skip) + +### Phase 183+ での拡張 + +**JsonParser パターン**: +- quote 比較(`ch == '"'`) +- delimiter 比較(`ch == ','`, `ch == ']'`, `ch == '}'`) +- escape 文字比較(`ch == '\\'`) +- キャリア: `ch` (LoopBodyLocal) +- アクション: break, continue, 複雑な処理 + +**CSV Parser パターン**: +- delimiter 比較(`ch == ','`) +- line break 比較(`ch == '\n'`) +- quote 処理(`ch == '"'`) + +**汎用文字比較ループ**: +- 任意の文字列との比較 +- 複数文字の OR 条件 +- 否定条件(`ch != '...'`) + +## 実装の安全性 + +### Conservative Approach + +1. **Phase 182**: ドキュメント・コメントのみ更新(実装変更なし) +2. **Phase 183**: 型エイリアス・ファイル名変更(後方互換性維持) +3. **Phase 184**: 旧名削除(完全統一) + +### テスト戦略 + +**既存テストの継続動作保証**: +```bash +# Trim pattern tests +cargo test --release --lib trim + +# JsonParser tests (uses Trim pattern) +./target/release/hakorune apps/tests/test_jsonparser_skip_whitespace.hako + +# Pattern2 tests +cargo test --release --lib pattern2 + +# Pattern4 tests +cargo test --release --lib pattern4 +``` + +## アーキテクチャへの影響 + +### joinir-architecture-overview.md への追記 + +**更新内容**: +```markdown +### Pattern 5: CharComparison (Trim-like) Loops + +**Previously Known As**: Trim Pattern (Phase 171-180) + +**Generalized**: Character comparison loops (Phase 182+) + +**Examples**: +- Trim: `ch == ' '` (whitespace skip) +- JsonParser: `ch == '"'` (quote detection), `ch == ','` (delimiter detection) +- CSV Parser: `ch == ','` (field delimiter), `ch == '\n'` (line break) + +**Components**: +- `CharComparisonHelper` (was `TrimLoopHelper`) - Pattern data structure +- `CharComparisonPatternLowerer` (was `TrimPatternLowerer`) - JoinIR condition generation +- `CharComparisonPatternValidator` (was `TrimPatternValidator`) - Pattern structure validation +- `LoopBodyCarrierPromoter` - Carrier promotion (shared, unchanged) + +**Lowering Module**: `src/mir/builder/control_flow/joinir/patterns/char_comparison_lowering.rs` +``` + +## 関連ドキュメント + +- `phase180-trim-module-design.md` - Trim module 当初の設計 +- `phase171-c-trim-pattern-lowering.md` - Phase 171 実装詳細 +- `phase181-jsonparser-loop-roadmap.md` - JsonParser 次実装予定 +- `joinir-architecture-overview.md` - JoinIR アーキテクチャ全体図 + +## タイムライン + +### Phase 182(このフェーズ) +- **Task 182-1**: 設計ドキュメント作成(このファイル) - 完了 +- **Task 182-2**: docstring 更新(オプション) - 10-15分 + +### Phase 183(次フェーズ) +- **Task 183-1**: 型名・ファイル名リネーム - 30分 +- **Task 183-2**: 型エイリアス追加 - 10分 +- **Task 183-3**: テスト確認 - 15分 + +### Phase 184+(最終フェーズ) +- **Task 184-1**: 旧名削除 - 20分 +- **Task 184-2**: 完全統一確認 - 10分 + +**Total Estimated Time**: 95-100分(3フェーズ合計) + +## 成功基準 + +### Phase 182 +- ✅ 設計ドキュメント作成完了 +- ✅ docstring に汎用化の意図を明記 +- ✅ Phase 183+ の実装計画を明確化 + +### Phase 183 +- ✅ 型名・ファイル名リネーム完了 +- ✅ 型エイリアスで後方互換性維持 +- ✅ 既存テスト全てパス(変更なし) + +### Phase 184+ +- ✅ 旧名完全削除 +- ✅ ドキュメント統一 +- ✅ "Trim" → "CharComparison" 用語統一完了 + +--- + +**作成日**: 2025-12-08 +**Phase**: 182(CharComparison 汎用化の準備・設計) +**ステータス**: ドキュメント・計画のみ(コード変更なし) +**次フェーズ**: Phase 183(実装・リネーム) diff --git a/docs/development/current/main/phase183-selfhost-depth2-joinir-status.md b/docs/development/current/main/phase183-selfhost-depth2-joinir-status.md new file mode 100644 index 00000000..318bb2a5 --- /dev/null +++ b/docs/development/current/main/phase183-selfhost-depth2-joinir-status.md @@ -0,0 +1,438 @@ +# Phase 183: Selfhost Depth-2 JoinIR 再観測(観測フェーズ) + +## 概要 + +Phase 150 で選定した「selfhost depth-2 の最小ループ 5本」について、 +Phase 171-181 での JoinIR ループ統一・Pattern 整備の後で、 +改めて「どのループが JoinIR で動いているか」を観測する。 + +目的は、selfhost depth-2 実装フェーズ(Phase 184+)での +「JoinIR → .hako 側フロントエンド」の設計に活かす。 + +## 背景: Selfhost Depth とは + +### Depth-1(現在の実装状態) + +**定義**: Rust コンパイラが .hako ソースをコンパイルする(1周目) + +**パイプライン**: +``` +target/release/hakorune (Rust) + ↓ [Stage-B: 関数スキャン + scaffold] +stage1_cli.hako (JSON v0 scaffold) + ↓ [Stage-1: CLI/using 解決] +stage1_output.hako (Stage-3 構文) + ↓ [Stage-3: 実際のコンパイル本体 - Rust実装] +Program(JSON v0) + ↓ [dev verify] +VM/LLVM 実行 +``` + +**現状**: Phase 150 で 5本の代表ケースが動作確認済み + +### Depth-2(Phase 183-184 での目標) + +**定義**: .hako コンパイラが .hako ソースをコンパイルする(2周目) + +**パイプライン**: +``` +target/release/hakorune (Rust) + ↓ [Stage-B: Rust実装] +stage1_cli.hako (JSON v0) + ↓ [Stage-1: .hako実装(NEW!)] +stage1_output.hako + ↓ [Stage-3: .hako実装(NEW!)] +Program(JSON v0) + ↓ [dev verify] +VM/LLVM 実行 +``` + +**Phase 183 の役割**: Depth-2 で動かす Stage-1/Stage-3 の .hako コンパイラを観測し、 +どのループが JoinIR で動いているかを確認 + +## Phase 150 で選定した Depth-2 最小ループ(5本) + +### Phase 150 選定内容の確認 + +Phase 150 のドキュメント(phase150_selfhost_stage3_depth1_baseline.md)によると、 +Depth-1 で動作確認済みの 5本のケースは以下の通り: + +| # | ケース名 | タイプ | 備考 | +|---|---------|--------|------| +| 1 | `peek_expr_block.hako` | block/match式 | Baseline: match式、ブロック式の基本動作確認 | +| 2 | `loop_min_while.hako` | loop基本 | Baseline: ループ変数、Entry PHI、Exit PHI | +| 3 | `string_method_chain.hako` | string処理 | NEW: メソッドチェーン(`substring().length()`) | +| 4 | `joinir_min_loop.hako` | loop+break | NEW: break制御、ControlForm::Loop検証 | +| 5 | `joinir_if_select_simple.hako` | if+return | NEW: 早期return、分岐の値伝播 | + +**注意**: これらは Depth-1(Rust コンパイラで実行)の**テストケース**であり、 +Depth-2 で観測する対象は「.hako コンパイラ自身のループ」である。 + +### Depth-2 観測対象の定義 + +**Phase 183 で観測すべき対象**: +- **Stage-1 コンパイラ**(`apps/selfhost-runtime/` 配下)のループ +- **Stage-3 コンパイラ**(`apps/selfhost-runtime/` 配下)のループ +- 特に「文字列解析」「トークン処理」「AST構築」に関わるループ + +**観測方針**: +1. Phase 181 で分析した JsonParser のループパターンと同様の手法を使う +2. MirAnalyzerBox / JoinIrAnalyzerBox での実行時観測 +3. ループごとに P1-P5 分類を行う + +## 観測方法 + +### Step 1: Depth-2 ループの特定 + +**対象ファイル**(Phase 150 で定義済み): +- `apps/selfhost-runtime/` 配下の .hako ファイル +- Stage-1/Stage-3 コンパイラの実装 + +**作業内容**: +1. selfhost-runtime 配下の .hako ファイルをリストアップ +2. 各ファイルのループを特定(行番号、関数名) +3. 最小の代表ループ 5-7本を選定(Phase 150 と同様) + +**選定基準**: +- 頻繁に実行されるループ(トークン走査、文字列解析など) +- 異なるパターン(P1-P5)を代表するループ +- 実装難易度が低い〜中程度のループ + +### Step 2: 各ループの Pattern 分類 + +**Phase 192 の AST feature extractor を使用**: + +```bash +# ループの特徴を自動抽出 +NYASH_FEATURES=stage3 NYASH_USE_NY_COMPILER=1 \ + ./target/release/hakorune --analyze-loop +``` + +**分類観点**: +- loop_condition: LoopParam/OuterLocal/LoopBodyLocal のどれに依存するか +- body_pattern: simple, break, continue, PHI など +- キャリア: 単一/複数、型 +- ブロック有無: if/else ネスト +- MethodCall: 有無、呼び出し回数 + +### Step 3: MirAnalyzerBox / JoinIrAnalyzerBox での検証 + +**実行方法**: +```bash +# Depth-2 selfhost 実行(Stage-1/Stage-3 を .hako で動かす) +NYASH_FEATURES=stage3 NYASH_USE_NY_COMPILER=1 \ + NYASH_JOINIR_STRICT=1 \ + NYASH_JOINIR_DEBUG=1 \ + ./target/release/hakorune +``` + +**観測ポイント**: +- どのループが JoinIR ルートで通っているか +- どのループが Fail-Fast しているか(理由付き) +- Phase 192 の AST feature extractor が正しく動作しているか + +**ログ確認**: +```bash +# JoinIR 詳細ログ +grep "\[trace:joinir\]" log.txt + +# Pattern 検出ログ +grep "\[trace:pattern\]" log.txt + +# Fail-Fast 理由 +grep "JoinIR blocked" log.txt +``` + +### Step 4: 結果まとめ + +**観測結果テーブル**(Task 183-2 で作成): +```markdown +| ループ名 | ファイル | 行番号 | Pattern 予想 | Pattern 実績 | JoinIR通過 | Fail-Fast理由 | 実装優先度 | +|---------|---------|--------|------------|-----------|-----------|-------------|-----------| +| ... | ... | ... | ... | ... | ... | ... | ... | +``` + +**分析観点**: +- P1-P5 のどのパターンが多いか +- Fail-Fast が多い原因は何か(LoopBodyLocal, MethodCall, etc.) +- Phase 184+ で優先実装すべきループはどれか + +## ドキュメント出力 + +### Task 183-1: ループ特定とパターン分類 + +**ファイル**: `phase183-selfhost-depth2-loop-inventory.md`(新規作成) + +**内容**: +```markdown +# Phase 183: Selfhost Depth-2 ループ一覧 + +## 選定ループ一覧(5-7本) + +| # | ループ名 | ファイル | 行番号 | 関数名 | 役割 | +|---|---------|---------|--------|--------|------| +| 1 | ... | ... | ... | ... | ... | +| 2 | ... | ... | ... | ... | ... | +| ... | ... | ... | ... | ... | ... | + +## 各ループの詳細構造 + +### Loop 1: ... + +**ソースコード**: +```nyash +loop(condition) { + ... +} +``` + +**特徴**: +- loop_condition: ... +- キャリア: ... +- PHI: ... +- MethodCall: ... +- break/continue: ... + +**P1-P5 分類**: Pattern X + +--- +``` + +### Task 183-2: JoinIR 通過・Fail-Fast 観測結果 + +**ファイル**: `phase183-selfhost-depth2-joinir-observation.md`(新規作成) + +**内容**: +```markdown +# Phase 183: Selfhost Depth-2 JoinIR 観測結果 + +## 実行環境 + +- **Date**: 2025-12-08 +- **Rust VM**: ./target/release/hakorune +- **JoinIR Strict**: NYASH_JOINIR_STRICT=1 +- **JoinIR Debug**: NYASH_JOINIR_DEBUG=1 +- **Selfhost**: NYASH_FEATURES=stage3 NYASH_USE_NY_COMPILER=1 + +## 観測結果サマリー + +| Pattern | JoinIR通過数 | Fail-Fast数 | 合計 | +|---------|------------|------------|------| +| P1 Simple | ... | ... | ... | +| P2 Break | ... | ... | ... | +| P3 If-PHI | ... | ... | ... | +| P4 Continue | ... | ... | ... | +| P5 Trim | ... | ... | ... | +| **合計** | ... | ... | ... | + +## 各ループの観測結果 + +### Loop 1: ... + +**実行コマンド**: +```bash +NYASH_FEATURES=stage3 NYASH_USE_NY_COMPILER=1 \ + NYASH_JOINIR_STRICT=1 \ + ./target/release/hakorune +``` + +**結果**: ✅ JoinIR 通過 / ❌ Fail-Fast + +**ログ**: +``` +[trace:joinir] pattern1: 3 functions, 13 blocks +[trace:pattern] route: Pattern1_Minimal MATCHED +``` + +**Pattern 分類**: Pattern X + +**Fail-Fast 理由**(該当する場合): +- LoopBodyLocal が条件に含まれる +- MethodCall が複数存在 +- その他 + +--- +``` + +### Task 183-3: Phase 184+ への提案 + +**ファイル**: `phase183-selfhost-depth2-implementation-plan.md`(新規作成) + +**内容**: +```markdown +# Phase 183: Selfhost Depth-2 実装計画(Phase 184+ への提案) + +## 観測結果に基づく戦略 + +### 高優先度ループ(Phase 184A) + +**対象**: +- ループ名: ... +- Pattern: ... +- 理由: ... + +**実装戦略**: +- ... + +### 中優先度ループ(Phase 184B) + +**対象**: +- ループ名: ... +- Pattern: ... +- 理由: ... + +**実装戦略**: +- ... + +### 低優先度ループ(Phase 184C+) + +**対象**: +- ループ名: ... +- Pattern: ... +- 理由: ... + +**実装戦略**: +- ... + +## .hako 側 JoinIR フロントエンド設計 + +### 必要な機能 + +1. **AST → JoinIR 変換**(.hako 実装) +2. **Pattern 検出ロジック**(.hako 実装) +3. **Carrier 情報の伝播**(.hako 実装) +4. **PHI 命令生成**(.hako 実装) + +### 段階的実装方針 + +**Phase 184A**: P1/P2 Simple ループの .hako 実装 +**Phase 184B**: P3/P4 複雑ループの .hako 実装 +**Phase 184C**: P5 Trim/CharComparison ループの .hako 実装 + +## Analyzer 拡張 + +### MirAnalyzerBox 拡張 + +**追加機能**: +- Selfhost Depth-2 専用ルート +- ループごとの Pattern 自動分類 +- Fail-Fast 理由の詳細レポート + +### JoinIrAnalyzerBox 拡張 + +**追加機能**: +- JoinIR 構造の可視化(DOT/JSON) +- ループごとの lowering ログ +- Phase 184+ 向けの実装ヒント出力 + +--- +``` + +## 関連ドキュメント + +- `phase150_selfhost_stage3_depth1_baseline.md` - Depth-1 ベースライン(Phase 150) +- `phase150_selfhost_stage3_depth1_results.md` - Depth-1 実行結果 +- `phase181-jsonparser-loop-roadmap.md` - JsonParser ループ分析(Phase 181) +- `phase182-char-comparison-generalization.md` - CharComparison 汎用化(Phase 182) +- `joinir-architecture-overview.md` - JoinIR アーキテクチャ全体図 + +## タイムライン + +### Phase 183(このフェーズ) + +- **Task 183-1**: ループ特定とパターン分類(60分) + - selfhost-runtime 配下の .hako ファイル解析 + - 5-7本の代表ループ選定 + - P1-P5 分類 +- **Task 183-2**: JoinIR 通過・Fail-Fast 観測(90分) + - MirAnalyzerBox / JoinIrAnalyzerBox での実行 + - 観測ログの収集・解析 + - 結果テーブル作成 +- **Task 183-3**: Phase 184+ への提案(45分) + - 実装優先度の決定 + - .hako 側 JoinIR フロントエンドの設計方針 + - Analyzer 拡張提案 + +**Total Estimated Time**: 195分(約3.25時間) + +### Phase 184+(次フェーズ以降) + +- **Phase 184A**: 高優先度ループ実装(P1/P2 Simple) +- **Phase 184B**: 中優先度ループ実装(P3/P4 Complex) +- **Phase 184C**: 低優先度ループ実装(P5 Trim/CharComparison) +- **Phase 185**: Analyzer 拡張実装 +- **Phase 186**: Depth-2 統合テスト + +## 成功基準 + +### Phase 183 + +- ✅ Depth-2 ループを 5-7本特定 +- ✅ 各ループの P1-P5 分類完了 +- ✅ MirAnalyzerBox / JoinIrAnalyzerBox での観測完了 +- ✅ 観測結果ドキュメント 3本作成 + - phase183-selfhost-depth2-loop-inventory.md + - phase183-selfhost-depth2-joinir-observation.md + - phase183-selfhost-depth2-implementation-plan.md +- ✅ Phase 184+ への実装方針明確化 + +### Phase 184+ + +- ✅ .hako 側 JoinIR フロントエンド実装開始 +- ✅ 高優先度ループの JoinIR 統一完了 +- ✅ Depth-2 selfhost 実行成功(最小ケース) + +## 重要な観点 + +### Depth-1 と Depth-2 の違い + +| 観点 | Depth-1(Phase 150) | Depth-2(Phase 183+) | +|------|---------------------|---------------------| +| コンパイラ | Rust | .hako | +| 対象 | テストケース(5本) | コンパイラ自身のループ(5-7本) | +| JoinIR | Rust実装済み | .hako実装が必要 | +| 目的 | 基本動作確認 | selfhost 完全実装 | + +### JoinIR → .hako フロントエンド設計の鍵 + +**Phase 183 の観測が重要な理由**: +1. **Pattern 分布の把握**: どのパターンが多いか → 実装優先度決定 +2. **Fail-Fast 原因の特定**: どのような制約がボトルネックか → 解決策設計 +3. **実装難易度の評価**: 段階的実装の計画立案 + +**Phase 184+ での活用**: +- P1/P2 Simple が多い → 優先実装 +- P3/P4 Complex が多い → PHI/MethodCall 対応が鍵 +- P5 Trim/CharComparison が多い → Phase 182 の汎用化が活きる + +## 備考 + +### Phase 150 との関係 + +Phase 150 は Depth-1 の**テストケース**を選定・実行したフェーズ。 +Phase 183 は Depth-2 の**コンパイラ自身のループ**を観測するフェーズ。 + +**相違点**: +- Phase 150: Rust コンパイラで .hako テストケースを実行 +- Phase 183: .hako コンパイラで .hako コンパイラを実行 + +**共通点**: +- どちらも「5-7本の代表ケース」を選定 +- どちらも JoinIR の動作確認が目的 + +### JsonParser との類似性 + +Phase 181 で JsonParser の全11ループを分析した手法を、 +Phase 183 では selfhost コンパイラのループに適用する。 + +**共通の分析手法**: +- ループの特徴抽出(loop_condition, carrier, PHI, etc.) +- P1-P5 分類 +- Fail-Fast 原因の特定 + +--- + +**作成日**: 2025-12-08 +**Phase**: 183(Selfhost Depth-2 JoinIR 再観測・設計) +**ステータス**: 観測計画ドキュメント(実装なし) +**次フェーズ**: Phase 184+(.hako 側 JoinIR フロントエンド実装)