================================================================================ Phase 15: Nyashセルフホスティング計画 - 71k→15k行への革命的圧縮 ================================================================================ 【ビジョン】 NyashでNyashコンパイラを書き、Nyashプログラムをコンパイル・実行する 完全なセルフホスティング環境の実現 + 劇的なコード圧縮(75%削減) 【数値目標】 現在: 71,000行(Rust実装) 目標: 15,000-20,000行(Nyash実装) 削減率: 約75% ================================================================================ 1. なぜセルフホスティングか + コード圧縮の価値 ================================================================================ ■ 言語の成熟度の証明 ├─ 自分自身をコンパイルできる = 実用的な言語 ├─ ドッグフーディング = 実際に使って改善 ├─ エコシステムの完成 = 外部依存からの解放 └─ 75%コード削減 = 保守性・理解容易性の劇的向上 ■ Everything is Box哲学の究極形 ├─ コンパイラもBox ├─ JITエンジンもBox ├─ リンカーもBox └─ すべてがNyashで完結 ■ コード削減の主要因 ├─ Arcパターンの自動化(-30%) ├─ 型システムの簡略化(-20%) ├─ エラーハンドリングの統一(-15%) └─ パターンマッチングの動的ディスパッチ化(-10%) ================================================================================ 2. 技術的実現可能性 ================================================================================ ■ Cranelift埋め込みの利点 ├─ 軽量: 3-5MB程度の追加(LLVMは50-100MB) ├─ Rustライブラリ: 静的リンクで配布容易 ├─ JIT特化: メモリ上でのコンパイル・実行に最適 └─ 依存が少ない: ビルド時間短縮 ■ 既存の準備状況 ├─ ✅ Cranelift統合準備済み(Cargo.toml) ├─ ✅ MIR15確定(シンプルなIR) ├─ ✅ プラグインシステム(拡張可能) └─ 🔄 Phase 10でJIT実装予定 ================================================================================ 3. 段階的実装計画 - ChatGPT5戦略による最速ルート ================================================================================ ■ Phase 15.0: YAML自動生成基盤(1-2週間)【最優先】 ├─ boxes.yaml: Box型定義(type_id, method_id対応表) ├─ externs.yaml: 外部関数定義(C ABI境界) ├─ semantics.yaml: MIR15セマンティクス定義 └─ build.rs: 自動生成システム(重複コード即削除) 効果: Array/Instance/Console等で即座に1-2万行削減 ■ Phase 15.1: 外部リンカー統合(1週間) box LinkerBox { link(objects, output) { if Platform.isWindows() { return exec("lld-link", objects + ["nyrt.lib", "/out:" + output]) } else { return exec("ld.lld", ["-o", output, objects, "nyrt.a"]) } } } ■ Phase 15.2: Nyashパーサー最小実装(2-3週間) ├─ 再帰下降パーサー(800行目標) ├─ MIR15 JSON出力(既存VMで即実行可能) ├─ エラー処理の簡略化(Result祭り解消) └─ ny-echo/ny-calcで動作確認 ■ Phase 15.3: MIR実行器のNyash化(2-3週間) box MirExecutor { // 動的ディスパッチで15命令を処理 execute(inst) { return me[inst.type](inst) } Const(inst) { me.values[inst.result] = inst.value } BinOp(inst) { /* 実装 */ } // ... 15命令分のメソッド } ■ Phase 15.4: Boxes高レベル実装移植(1ヶ月) ├─ String/Array/Map等の表層メソッドをNyashへ ├─ NyRT側は最小プリミティブのみ維持 ├─ プラグインBox統合 └─ 目標: 3,000行以下 ■ Phase 15.5: インタープリターコア移植(1ヶ月) ├─ 評価ループのNyash化(3,000行目標) ├─ Arc自動管理の恩恵 ├─ GCフックはNyRT委譲 └─ 自己コンパイル可能ラインへ ■ Phase 15.6: ブートストラップ(2週間) ├─ c0(Rust版)→ c1(Nyash版)コンパイル ├─ c1 → c1' 自己コンパイル ├─ パリティテスト(trace_hash一致) └─ 完全セルフホスティング達成 ================================================================================ 4. EXEファイル生成・リンク戦略(ChatGPT5提案) ================================================================================ ■ 段階的アプローチ(現実的順序) ├─ Phase 1: 外部リンカー利用(lld/gcc)【最速】 ├─ Phase 2: lld内蔵(配布容易性) └─ Phase 3: ミニリンカー自作(究極の自立) ■ C ABI境界設計(ny_プレフィクス統一) ├─ 呼出規約: Windows(fastcall) / Linux(sysv_amd64) ├─ 型マッピング: ny_handle=uint64_t, 数値=int64_t/double ├─ シンボル: ny_v1_console_log, ny_init, ny_fini └─ 必須: 16Bスタックアライン、32B Shadow Space(Win64) ■ リンク形態の選択 ├─ 静的リンク: nyrt.lib/.a同梱(配布楽・サイズ大) ├─ 動的リンク: nyrt.dll/.so依存(サイズ小・管理難) └─ バンドル方式: スタブEXEにMIR埋め込み(初期案) ■ 最小リンカー実装(将来ロマン) box MiniLinkerBox { // PE/ELFサブセット実装 link(objects) { local exe = new ExecutableBuilder() exe.addSections(objects) exe.resolveSymbols() exe.applyRelocations() return exe.build() } } ================================================================================ 5. 実装上の課題と解決策 ================================================================================ ■ 課題1: パフォーマンス ├─ 問題: Nyashで書いたコンパイラは遅い? └─ 解決: ホットパスをCraneliftでJIT最適化 ■ 課題2: メモリ使用量 ├─ 問題: Everything is Boxのオーバーヘッド └─ 解決: コンパイラ特有の最適化Box設計 ■ 課題3: デバッグの難しさ ├─ 問題: セルフホスティングのデバッグは複雑 └─ 解決: 段階的移行・既存コンパイラとの比較検証 ■ 課題4: ABI互換性 ├─ 問題: プラットフォーム毎の呼出規約差異 └─ 解決: 統一FFI層(type_id, method_id)で抽象化 ================================================================================ 6. 期待される成果 ================================================================================ ■ 技術的成果 ├─ 完全なセルフホスティング言語 ├─ 外部コンパイラ依存からの解放 ├─ Nyashエコシステムの完成 ├─ 言語の実用性の証明 └─ 【革命】71,000行→15,000行(75%削減) ■ 教育的価値 ├─ コンパイラ実装の教材として ├─ Nyashで学ぶコンパイラ理論 ├─ シンプルで理解しやすい実装 └─ 15,000行で読破可能なコンパイラ ■ コミュニティへの影響 ├─ 開発者の参入障壁低下 ├─ Nyashだけで開発環境構築 ├─ 真の「Everything is Box」体験 └─ コントリビューション容易化 ■ コード削減の具体例 ├─ Boxes実装: 11,153行 → 2,000行(80%削減) ├─ Interpreter: 11,278行 → 3,000行(73%削減) ├─ MIR: 10,918行 → 2,500行(77%削減) ├─ Parser: 2,680行 → 800行(70%削減) └─ Backend: 9,196行 → 3,000行(67%削減) ================================================================================ 7. 成功指標 ================================================================================ □ NyashコンパイラがNyash自身をコンパイル可能 □ コード行数: 15,000-20,000行以内(75%削減達成) □ 性能: Rustコンパイラの50%以上 □ バイナリサイズ: 10MB以下(Cranelift込み) □ コンパイル時間: 中規模プロジェクトで10秒以内 □ 100%のテストケース互換性 □ trace_hash/heap_hashパリティ(VM/JIT/AOT) ================================================================================ 8. ロードマップ依存関係 ================================================================================ 必須完了フェーズ: ├─ Phase 10: Cranelift JIT統合 ├─ Phase 11.8: MIR Core-13最適化 ├─ Phase 12: プラグインシステム統一 ├─ Phase 12.5: 最適化戦略確立 └─ Phase 14: 実アプリでの実証 推定開始時期: 2026年前半 推定完了時期: 2026年後半 ================================================================================ 9. 実装優先順位(ChatGPT5推奨) ================================================================================ ■ 今すぐ着手(2日以内) ├─ boxes.yaml/externs.yaml/semantics.yaml スキーマ設計 ├─ build.rs自動生成(Array/Instance/Console) └─ 生成物でのパリティテスト ■ 今週中 ├─ 外部リンカー呼び出し実装 ├─ ny_プレフィクスABI仕様書作成 └─ echo/calcのリンク動作確認 ■ 今月中 ├─ Nyashパーサー骨格(MIR15 JSON出力) ├─ MirExecutorのNyash実装開始 └─ 1万行削減の実証 ■ 3ヶ月以内 ├─ c0→c1ブートストラップ ├─ 主要Box型のNyash移植 └─ 3万行削減達成 ================================================================================ 10. 夢の先にあるもの ================================================================================ セルフホスティング達成後の可能性: ■ Nyash専用最適化 ├─ Box境界での特殊最適化 ├─ Everything is Box前提の新しい最適化手法 └─ Nyashらしい高速化 ■ 新しいバックエンド ├─ WebAssembly直接出力 ├─ GPU計算対応 └─ 組み込みターゲット ■ 言語の進化 ├─ Nyashで実験的機能を実装 ├─ コミュニティ駆動の言語拡張 └─ 真のオープンソース言語 ■ 究極の姿 ├─ 15,000行で完全なコンパイラ ├─ 誰でも読めて改造できる ├─ 教育用言語の決定版 └─ Everything is Boxの証明 ================================================================================ 「コンパイラもBox、リンカーもBox、すべてがBox」 「71,000行→15,000行、これが革命」 これがNyashの究極の姿。