================================================================================ Phase 15: Nyashセルフホスティング計画 - 80k→20k行への革命的圧縮 ================================================================================ 【ビジョン】 NyashでNyashコンパイラを書き、Nyashプログラムをコンパイル・実行する 完全なセルフホスティング環境の実現 + 劇的なコード圧縮(75%削減) MIR 13命令の美しさを最大限に活かした究極の実装 【数値目標】 現在: 80,000行(Rust実装) 第一目標: 20,000行(Nyash実装) 削減率: 75% 究極の夢: さらなる最適化で更に小さく! 【革命的要素】 MIR命令数: たった13個で全機能実現 バックエンド選択: Cranelift/直接x86/テンプレート方式 バイナリサイズ: 2-3KBの超小型も可能 ================================================================================ 1. なぜセルフホスティングか + コード圧縮の価値 ================================================================================ ■ 言語の成熟度の証明 ├─ 自分自身をコンパイルできる = 実用的な言語 ├─ ドッグフーディング = 実際に使って改善 ├─ エコシステムの完成 = 外部依存からの解放 └─ 75%コード削減 = 保守性・理解容易性の劇的向上 ■ Everything is Box哲学の究極形 ├─ コンパイラもBox ├─ JITエンジンもBox ├─ リンカーもBox └─ すべてがNyashで完結 ■ コード削減の主要因 ├─ Arcパターンの自動化(-30%) ├─ 型システムの簡略化(-20%) ├─ エラーハンドリングの統一(-15%) └─ パターンマッチングの動的ディスパッチ化(-10%) ================================================================================ 2. 技術的実現可能性 ================================================================================ ■ Cranelift埋め込みの利点 ├─ 軽量: 3-5MB程度の追加(LLVMは50-100MB) ├─ Rustライブラリ: 静的リンクで配布容易 ├─ JIT特化: メモリ上でのコンパイル・実行に最適 └─ 依存が少ない: ビルド時間短縮 ■ 既存の準備状況 ├─ ✅ MIR 13命令に削減完了(究極のシンプルさ) ├─ ✅ Cranelift統合準備済み(Cargo.toml) ├─ ✅ 直接x86エミッタ選択肢(dynasm-rs/iced-x86) ├─ ✅ プラグインシステム(拡張可能) └─ ✅ Phase 12で統一実行パス確立 ================================================================================ 3. 段階的実装計画 - ChatGPT5戦略による最速ルート ================================================================================ ■ Phase 15.0: バックエンド選択戦略(新規追加) ├─ 選択肢1: Cranelift(現在の主力、安定) ├─ 選択肢2: 直接x86エミッタ(dynasm-rs使用、高速) ├─ 選択肢3: テンプレート・スティッチャ(2-3KB超小型) └─ 段階的移行: Cranelift→x86→テンプレート ■ Phase 15.1: YAML自動生成基盤(1-2週間)【最優先】 ├─ boxes.yaml: Box型定義(type_id, method_id対応表) ├─ externs.yaml: 外部関数定義(C ABI境界) ├─ semantics.yaml: MIR13セマンティクス定義(13命令!) └─ 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」体験 └─ コントリビューション容易化 ■ コード削減の具体例(80k→20k) ├─ Boxes実装: 13,000行 → 3,000行(77%削減) ├─ Interpreter: 15,000行 → 4,000行(73%削減) ├─ MIR: 12,000行 → 2,000行(83%削減、13命令化の効果) ├─ Parser: 5,000行 → 1,500行(70%削減) ├─ Backend: 15,000行 → 4,000行(73%削減) └─ その他: 20,000行 → 5,500行(72%削減) ================================================================================ 7. 成功指標 ================================================================================ □ NyashコンパイラがNyash自身をコンパイル可能 □ コード行数: 20,000行以内(75%削減達成) □ MIR 13命令での完全実装 □ 性能: Rustコンパイラの50%以上 □ バイナリサイズ: - Cranelift版: 10MB以下 - 直接x86版: 5MB以下 - テンプレート版: 1MB以下(夢の2-3KBも視野) □ コンパイル時間: 中規模プロジェクトで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の究極の姿。