# Phase 15: Nyashセルフホスティング - 世界一美しい箱の完成 ## 📋 概要 NyashでNyashコンパイラを書く、完全なセルフホスティングの実現フェーズ。 MIR 13命令の美しさを最大限に活かし、外部コンパイラ依存から完全に解放される。 **究極の目標:80,000行→20,000行(75%削減)→ さらなる最適化へ** ## 🎯 フェーズの目的 1. **完全なセルフホスティング**: NyashコンパイラをNyashで実装 2. **外部依存の排除**: gcc/clang/MSVC不要の世界 3. **Everything is Box哲学の完成**: コンパイラもBox 4. **エコシステムの自立**: Nyashだけで完結する開発環境 5. **劇的なコード圧縮**: 75%削減で保守性・可読性の革命 ## 📊 主要成果物 ### コンパイラコンポーネント - [ ] CompilerBox実装(統合コンパイラ) - [ ] Nyashパーサー(800行目標) - [ ] MIR Lowerer(2,500行目標) - [ ] CraneliftBox(JITエンジンラッパー) - [ ] LinkerBox(lld内蔵リンカー統合) - [ ] nyashrtランタイム(静的/動的ライブラリ) - [ ] ToolchainBox(環境診断・SDK検出) ### 自動生成基盤 - [ ] boxes.yaml(Box型定義) - [ ] externs.yaml(C ABI境界) - [ ] semantics.yaml(MIR15定義) - [ ] build.rs(自動生成システム) ### ブートストラップ - [ ] c0→c1コンパイル成功 - [ ] c1→c1'自己コンパイル - [ ] パリティテスト合格 ## 🔧 技術的アプローチ ### MIR 13命令の革命 - **基本演算(5)**: Const, UnaryOp, BinOp, Compare, TypeOp - **メモリ(2)**: Load, Store - **制御(4)**: Branch, Jump, Return, Phi - **Box(1)**: BoxCall(すべての箱操作を統合) - **外部(1)**: ExternCall この究極のシンプルさにより、直接x86変換も現実的に! ### バックエンドの選択肢 #### 1. Cranelift + lld内蔵(ChatGPT5推奨) - **軽量**: 3-5MB程度(LLVMの1/10以下) - **JIT特化**: メモリ上での動的コンパイル - **Rust統合**: 静的リンクで配布容易 - **lld内蔵**: Windows(lld-link)/Linux(ld.lld)で完全自立 - **C ABIファサード**: `ny_mir_to_obj()`で美しい境界 #### 2. 直接x86エミッタ(将来の革新的アプローチ) - **dynasm-rs/iced-x86**: Rust内で直接アセンブリ生成 - **テンプレート・スティッチャ方式**: 2-3KBの超小型バイナリ可能 - **完全な制御**: 依存ゼロの究極形 ### コード削減の秘密 - **Arc自動化**: 明示的ロック管理不要(-30%) - **型システム簡略化**: 動的型付けの恩恵(-20%) - **エラー処理統一**: Result地獄からの解放(-15%) - **動的ディスパッチ**: match文の大幅削減(-10%) ### 実装例 ```nyash // 80,000行のRust実装が20,000行のNyashに! box NyashCompiler { parser: ParserBox lowerer: LowererBox backend: BackendBox birth() { me.parser = new ParserBox() me.lowerer = new LowererBox() me.backend = new BackendBox() } compile(source) { local ast = me.parser.parse(source) local mir = me.lowerer.lower(ast) return me.backend.generate(mir) } } // MIR実行器も動的ディスパッチで簡潔に box MirExecutor { values: MapBox birth() { me.values = new MapBox() } execute(inst) { return me[inst.type](inst) } Const(inst) { me.values[inst.result] = inst.value } BinOp(inst) { /* 実装 */ } } // lld内蔵リンカー(ChatGPT5協議) box LinkerBox { platform: PlatformBox lld_path: StringBox libraries: ArrayBox birth(platform) { me.platform = platform me.lld_path = platform.findLldPath() me.libraries = new ArrayBox() } link(objects, output) { local cmd = me.build_command(objects, output) return me.platform.execute(cmd) } } ``` ### テンプレート・スティッチャ方式(革新的アプローチ) ```nyash // 各MIR命令を共通スタブとして実装 box TemplateStitcher { init { stubs } constructor() { me.stubs = new MapBox() // 各命令の共通実装をスタブとして登録 me.stubs.set("Const", 0x1000) // スタブアドレス me.stubs.set("BinOp", 0x1100) me.stubs.set("BoxCall", 0x1200) // ... 13命令分のスタブ } generate(mir) { local jumps = new ArrayBox() // プログラムはスタブ間のジャンプ列に! for inst in mir.instructions { jumps.push("jmp " + me.stubs.get(inst.type)) } return jumps // 超小型バイナリ! } } ``` ## 🔗 EXEファイル生成・リンク戦略 ### 統合ツールチェーン(ChatGPT5協議済み) ```bash nyash build main.ny --backend=cranelift --target=x86_64-pc-windows-msvc ``` ### 実装戦略 1. **MIR→Cranelift**: MIR13をCranelift IRに変換 2. **Cranelift→Object**: ネイティブオブジェクトファイル生成(.o/.obj) 3. **lld内蔵リンク**: lld-link(Win)/ld.lld(Linux)でEXE作成 4. **nyashrtランタイム**: 静的/動的リンク選択可能 ### C ABI境界設計 ```c // 最小限の美しいインターフェース ny_mir_to_obj(mir_bin, target_triple) -> obj_bytes ny_mir_jit_entry(mir_bin) -> exit_code ny_free_buf(buffer) ``` 詳細は[**自己ホスティングlld戦略**](self-hosting-lld-strategy.md)を参照。 ## 🔗 関連ドキュメント - [🚀 自己ホスティングlld戦略](self-hosting-lld-strategy.md) **← NEW!** - [🧱 箱積み上げ準備メモ](box-stacking-preparation.txt) **← NEW!** - [セルフホスティング詳細計画](self-hosting-plan.txt) - [技術的実装詳細](technical-details.md) - [Phase 10: Cranelift JIT](../phase-10/) - [Phase 12.5: 最適化戦略](../phase-12.5/) - [Phase 12.7: ANCP圧縮](../phase-12.7/) ## 📅 実施時期 - **開始条件**: Phase 10-14完了後 - **推定開始**: 2026年前半 - **推定期間**: 6-8ヶ月 - **早期着手**: YAML自動生成は今すぐ開始可能 ## 💡 期待される成果 1. **技術的証明**: 実用言語としての成熟度 2. **開発効率**: Nyashだけで開発完結 3. **教育価値**: 15,000行で読破可能なコンパイラ 4. **コミュニティ**: 参入障壁の大幅低下 5. **保守性革命**: 75%削減で誰でも改造可能 ## 🌟 夢の実現 > 「コンパイラもBox、リンカーもBox、すべてがBox」 > 「71,000行→15,000行、これが革命」 外部ツールチェーンに依存しない、真の自立したプログラミング言語へ。 ### 数値で見る革命 - **現在**: 80,000行(Rust実装) - **第一目標**: 20,000行(Nyashセルフホスティング、**75%削減**) - **究極の夢**: さらなる最適化でより小さく! - **MIR命令数**: たった13個で全機能実現 - **理解容易性**: 週末で読破可能なコンパイラ - **バイナリサイズ**: テンプレート方式なら2-3KBも可能 - **教育的価値**: 世界一美しく、世界一小さい実用コンパイラ ### 🌟 Everything is Boxの究極形 - コンパイラもBox - リンカーもBox - アセンブラもBox - すべてがBox! **世界一美しい箱は、自分自身さえも美しく包み込む**