Files
hakorune/docs
nyash-codex 35f5a48eb0 docs(joinir): Phase 33 Completion - Box Theory Modularization Summary
## Phase 33: Complete JoinIR Modularization via Box Theory (3 Phases)

This commit consolidates the comprehensive modularization work across three phases:
- Phase 33-10: Exit Line Modularization (ExitLineReconnector + ExitMetaCollector Boxes)
- Phase 33-11: Quick Wins (Pattern 4 stub clarification, unused imports cleanup)
- Phase 33-12: Large Module Modularization (split mod.rs, loop_patterns.rs restructuring)

### Phase 33-10: Exit Line Modularization (Boxes P0-P1)

**New Files**:
- `exit_line/reconnector.rs` (+130 lines): ExitLineReconnector Box
  - Responsibility: Update host variable_map with remapped exit values
  - Design: Phase 197-B multi-carrier support (each carrier gets specific remapped value)
  - Pure side effects: Only updates builder.variable_map
  - Testing: Independent unit testing possible without full merge machinery

- `exit_line/meta_collector.rs` (+102 lines): ExitMetaCollector Box
  - Responsibility: Construct exit_bindings from ExitMeta + variable_map lookup
  - Design: Pure function philosophy (no side effects except variable_map reads)
  - Reusability: Pattern-agnostic (works for Pattern 1, 2, 3, 4)
  - Algorithm: For each carrier in exit_meta, lookup host ValueId, create binding

- `exit_line/mod.rs` (+58 lines): ExitLineOrchestrator facade
  - Coordination: Orchestrates Phase 6 boundary reconnection
  - Architecture: Delegates to ExitLineReconnector (demonstrates Box composition)
  - Documentation: Comprehensive header explaining Box Theory modularization benefits

**Modified Files**:
- `merge/mod.rs` (-91 lines): Extracted reconnect_boundary() → ExitLineReconnector
  - Made exit_line module public (was mod, now pub mod)
  - Phase 6 delegation: Local function call → ExitLineOrchestrator::execute()
  - Added exit_bindings' join_exit_values to used_values for remapping (Phase 172-3)

- `patterns/pattern2_with_break.rs` (-20 lines): Uses ExitMetaCollector
  - Removed: Manual exit_binding construction loop
  - Added: Delegated ExitMetaCollector::collect() for cleaner caller code
  - Benefit: Reusable collector for all pattern lowerers (Pattern 1-4)

**Design Philosophy** (Exit Line Module):
Each Box handles one concern:
- ExitLineReconnector: Updates host variable_map with exit values
- ExitMetaCollector: Constructs exit_bindings from ExitMeta
- ExitLineOrchestrator: Orchestrates Phase 6 reconnection

### Phase 33-11: Quick Wins

**Pattern 4 Stub Clarification** (+132 lines):
- Added comprehensive header documentation (106 lines)
- Made `lower()` return explicit error (not silent stub)
- Migration guide: Workarounds using Pattern 1-3
- New file: `docs/development/proposals/phase-195-pattern4.md` (implementation plan)
- Status: Formal documentation that Pattern 4 is deferred to Phase 195

**Cleanup**:
- Removed unused imports via `cargo fix` (-10 lines, 11 files)
- Files affected: generic_case_a/ (5 files), if_merge.rs, if_select.rs, etc.

### Phase 33-12: Large Module Modularization

**New Files** (Modularization):
- `if_lowering_router.rs` (172 lines): If-expression routing
  - Extracted from mod.rs lines 201-423
  - Routes if-expressions to appropriate JoinIR lowering strategies
  - Single responsibility: If expression dispatch

- `loop_pattern_router.rs` (149 lines): Loop pattern routing
  - Extracted from mod.rs lines 424-511
  - Routes loop patterns to Pattern 1-4 implementations
  - Design: Dispatcher pattern for pattern selection

- `loop_patterns/mod.rs` (178 lines): Pattern dispatcher + shared utilities
  - Created as coordinator for per-pattern files
  - Exports all pattern functions via pub use
  - Utilities: Shared logic across pattern lowerers

- `loop_patterns/simple_while.rs` (225 lines): Pattern 1 lowering
- `loop_patterns/with_break.rs` (129 lines): Pattern 2 lowering
- `loop_patterns/with_if_phi.rs` (123 lines): Pattern 3 lowering
- `loop_patterns/with_continue.rs` (129 lines): Pattern 4 stub

**Modified Files** (Refactoring):
- `lowering/mod.rs` (511 → 221 lines, -57%):
  - Removed try_lower_if_to_joinir() (223 lines) → if_lowering_router.rs
  - Removed try_lower_loop_pattern_to_joinir() (88 lines) → loop_pattern_router.rs
  - Result: Cleaner core module with routers handling dispatch

- `loop_patterns.rs` → Re-export wrapper (backward compatibility)

**Result**: Clearer code organization
- Monolithic mod.rs split into focused routers
- Large loop_patterns.rs split into per-pattern files
- Better maintainability and testability

### Phase 33: Comprehensive Documentation

**New Architecture Documentation** (+489 lines):
- File: `docs/development/architecture/phase-33-modularization.md`
- Coverage: All three phases (33-10, 33-11, 33-12)
- Content:
  - Box Theory principles applied
  - Complete statistics table (commits, files, lines)
  - Code quality analysis
  - Module structure diagrams
  - Design patterns explanation
  - Testing strategy
  - Future work recommendations
  - References to implementation details

**Source Code Comments** (+165 lines):
- `exit_line/mod.rs`: Box Theory modularization context
- `exit_line/reconnector.rs`: Design notes on multi-carrier support
- `exit_line/meta_collector.rs`: Pure function philosophy
- `pattern4_with_continue.rs`: Comprehensive stub documentation + migration paths
- `if_lowering_router.rs`: Modularization context
- `loop_pattern_router.rs`: Pattern dispatch documentation
- `loop_patterns/mod.rs`: Per-pattern structure benefits

**Project Documentation** (+45 lines):
- CLAUDE.md: Phase 33 completion summary + links
- CURRENT_TASK.md: Current state and next phases

### Metrics Summary

**Phase 33 Total Impact**:
- Commits: 5 commits (P0, P1, Quick Wins×2, P2)
- Files Changed: 15 files modified/created
- Lines Added: ~1,500 lines (Boxes + documentation + comments)
- Lines Removed: ~200 lines (monolithic extractions)
- Code Organization: 2 monolithic files → 7 focused modules
- Documentation: 1 comprehensive architecture guide created

**mod.rs Impact** (Phase 33-12 P2):
- Before: 511 lines (monolithic)
- After: 221 lines (dispatcher + utilities)
- Reduction: -57% (290 lines extracted)

**loop_patterns.rs Impact** (Phase 33-12 P2):
- Before: 735 lines (monolithic)
- After: 5 files in loop_patterns/ (178 + 225 + 129 + 123 + 129)
- Improvement: Per-pattern organization

### Box Theory Principles Applied

1. **Single Responsibility**: Each Box handles one concern
   - ExitLineReconnector: variable_map updates
   - ExitMetaCollector: exit_binding construction
   - if_lowering_router: if-expression dispatch
   - loop_pattern_router: loop pattern dispatch
   - Per-pattern files: Individual pattern lowering

2. **Clear Boundaries**: Public/private visibility enforced
   - Boxes have explicit input/output contracts
   - Module boundaries clearly defined
   - Re-exports for backward compatibility

3. **Replaceability**: Boxes can be swapped/upgraded independently
   - ExitLineReconnector can be optimized without affecting ExitMetaCollector
   - Per-pattern files can be improved individually
   - Router logic decoupled from lowering implementations

4. **Testability**: Smaller modules easier to unit test
   - ExitMetaCollector can be tested independently
   - ExitLineReconnector mockable with simple boundary
   - Pattern lowerers isolated in separate files

### Design Patterns Introduced

1. **Facade Pattern**: ExitLineOrchestrator
   - Single-entry point for Phase 6 reconnection
   - Hides complexity of multi-step process
   - Coordinates ExitLineReconnector + other steps

2. **Dispatcher Pattern**: if_lowering_router + loop_pattern_router
   - Centralized routing logic
   - Easy to add new strategies
   - Separates dispatch from implementation

3. **Pure Function Pattern**: ExitMetaCollector::collect()
   - No side effects (except reading variable_map)
   - Easy to test, reason about, parallelize
   - Reusable across all pattern lowerers

### Testing Strategy

- **Unit Tests**: Can test ExitMetaCollector independently
- **Integration Tests**: Verify boundary reconnection works end-to-end
- **Regression Tests**: Pattern 2 simple loop still passes
- **Backward Compatibility**: All existing imports still work

### Future Work

- **Phase 33-13**: Consolidate whitespace utilities (expected -100 lines)
- **Phase 34**: Extract inline_boundary validators (expected 3h effort)
- **Phase 35**: Mark loop_patterns_old.rs as legacy and remove (Phase 35+)
- **Phase 195**: Implement Pattern 4 (continue) fully
- **Phase 200+**: More complex loop patterns and optimizations

🧱 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 04:03:42 +09:00
..

📚 Nyash Documentation

🚀 はじめに(導線)

  • 現在のタスクと進行状況: ../CURRENT_TASK.md
  • コア概念の速習: reference/architecture/nyash_core_concepts.md
  • 設計ブループリント(文字列/文字コード): development/design/blueprints/strings-utf8-byte.md

📂 ドキュメント構造(指針)

📖 reference/ - 正式な技術仕様

  • language/ - 言語仕様構文、型システム、Box仕様
  • architecture/ - システムアーキテクチャMIR、VM、実行バックエンド
  • api/ - ビルトインBoxのAPI仕様
  • plugin-system/ - プラグインシステム、BID-FFI仕様
    • 🆕🔥 TypeBox ABI統合 + セルフホスティング - ABIすらBoxとして扱う革命的設計
    • まずはこちら: reference/boxes-system/plugin_lifecycle.mdPluginBoxV2のライフサイクル、singleton、nyash.tomlの要点

📚 guides/ - 利用者向けガイド

  • getting-started.md - はじめに(統一版)
  • tutorials/ - ステップバイステップのチュートリアル
  • examples/ - 実践的なサンプルコード
  • wasm-guide/ - WebAssemblyビルドガイド

🧩 how-to/ - 目的別ハウツー

  • 手順重視の短いガイド(前提→コマンド→検証)

🔧 development/ - 開発者向け

  • current/ - 現在進行中のタスクCURRENT_TASK.md等
  • roadmap/ - 開発計画
    • phases/ - Phase 812の詳細計画
    • phase-12/ - 🆕🔥 TypeBox統合ABI + Nyash ABI C実装セルフホスティング実現
    • native-plan/ - ネイティブビルド計画
  • proposals/ - RFC、新機能提案

🔌 Net PluginHTTP/TCP

  • 使い方と仕様: reference/plugin-system/net-plugin.md

🗄️ archive/ - アーカイブ

  • consultations/ - AI相談記録gemini/chatgpt/codex
  • decisions/ - 過去の設計決定
  • build-logs/ - ビルドログ、ベンチマーク結果
  • old-versions/ - 古いドキュメント

📌 Docs マップ(トップレベルとステータス)

新しくドキュメントを書くときや、どこに置くか迷ったときはこの表を基準にする。

パス 用途 主な対象 ステータス
reference/ 言語仕様・正式なリファレンス 利用者 / 実装者 Active / SSOT
guides/ チュートリアル・長めの読み物 利用者 / 新規開発者 Active
how-to/ 手順書・レシピ集 日常開発 Active
quick-reference/ コマンドやオプションの早見表 日常参照 Active
development/ Rust 実装側の設計・ロードマップ コア開発者 ActiveRust層
private/ 将来の整理待ちのメモ・長文案 コア開発者 Draft / Incubator
design/ 公開可能な安定寄り設計ノート 実装者 Active安定設計
architecture/ 全体アーキテクチャの俯瞰図 実装者 / 設計者 Active
abi/ Nyash/Hakorune ABI 関連 実装者 Active
specs/ 古めの仕様・実験的仕様 実装者 Legacy必要に応じ参照
checklists/ レビュー・設計チェックリスト 実装者 Active
tools/ ドキュメント生成・補助スクリプト 実装者 Active
updates/ リリースノート・変更履歴 利用者 / 実装者 Active
releases/ リリース関連ドキュメント 利用者 Active
archive/ 旧ドキュメント・歴史資料 研究・考古学用 Archived正本ではない
assets/ 画像などの共有アセット すべて Support
ENV_VARS.md 環境変数リファレンス 実装者 / 運用者 Active集約先

運用ルール(提案):

  • 新規仕様/設計: まずは private/ に置き、安定したら reference/ or design/ へ昇格する。
  • Rust 実装寄りの話: development/ 配下に置く(セルフホスト側は private/roadmap 等)。
  • 古い資料・置き換え済み: 内容を変えずに archive/ 以下へ移動し、先頭に「Archived / 新しい場所」の一行メモを書く。
  • ユーザー向けに見せたいもの: guides/, how-to/, quick-reference/, releases/ を優先する。

🎯 クイックアクセス

すぐ始める

  • guides/getting-started.md
  • guides/language-guide.md
  • guides/p2p-guide.md

技術リファレンス

  • reference/language/LANGUAGE_REFERENCE_2025.md
  • reference/language/EBNF.md演算子: ! 採用 / do-while 非採用)
  • reference/language/strings.mdUTF8/Byte 二本柱)
  • reference/architecture/TECHNICAL_ARCHITECTURE_2025.md
  • reference/architecture/execution-backends.md
  • reference/runtime/gc.md
  • reference/plugin-system/
  • tools/cli-options.mdCLI早見表

デザイン/ガイド

  • guides/language-core-and-sugar.mdコア最小糖衣
  • guides/loopform.mdループ正規化
  • guides/scopebox.md開発時の可視化
  • guides/dev-local-alias.md開発向け: 行頭 @name = expr → local 宣言糖衣)
  • guides/box-patterns.mdBoxパターン集Ownership/Lease/Cancel/Capability/Affinity/Observable
  • guides/box-design-checklist.mdBox 設計チェックリスト)
  • proposals/concurrency/boxes.md並行モデルのBox設計Routine/Channel/Select/Scope
  • reference/concurrency/semantics.mdブロッキング/close/select/観測の規約)
  • design/(設計ノート入口)
    • development/design/legacy/flow-blocks.md矢印フロー匿名ブロック・設計草案
    • development/proposals/scope-reuse.mdスコープ再利用ブロック・MVP提案
    • reference/language/match-guards.mdガード連鎖Range・CharClass設計
    • guides/core-principles.md最小構文・ゼロランタイム・可視化の原則

開発状況


📋 再編成について / フォルダの見分け方

ドキュメントは2025年8月20日に再編成されました。詳細はREORGANIZATION_REPORT.mdを参照してください。

旧パスから新パスへの主な変更:

  • 説明書/guides/reference/ に分割
  • 予定/development/roadmap/
  • 散在していたファイル → 適切なカテゴリに整理

補足:

  • reference/ は正本(仕様)。
  • guides/ は読み物、how-to/ は手順書。
  • design/ は公開できる設計ノート。
  • private/ は下書き保管庫(将来 reference//design/ に昇格)。

Nyash は「Everything is Box」哲学に基づく言語です。詳細はコア概念とガイドを参照してください。