Files
hakorune/docs/development/roadmap/phases/phase-15/self-hosting-plan.txt

292 lines
11 KiB
Plaintext
Raw Normal View History

================================================================================
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<Mutex>パターンの自動化(-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<Mutex>自動管理の恩恵
├─ GCフックはNyRT委譲
└─ 自己コンパイル可能ラインへ
■ Phase 15.6: ブートストラップ2週間
├─ c0Rust版→ c1Nyash版コンパイル
├─ 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 SpaceWin64
■ リンク形態の選択
├─ 静的リンク: 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の究極の姿。