Files
hakorune/docs/development/roadmap/phases/phase-15/self-hosting-plan.txt
Moe Charm de99b40bee Phase 12 TypeBox統合ABI設計完了: C ABI + Nyash ABI革命的統合
主な成果:
- TypeBox(型情報をBoxとして扱う)による統合ABI設計
- C ABI + Nyash ABIの完全統合仕様書作成
- 3大AI専門家(Gemini/Codex/ChatGPT5)による検証済み
- ChatGPT5の10個の安全性改善提案を反映
- README.mdのドキュメント更新(全起点から到達可能)

MapBox拡張:
- string型キーサポート(従来のi64に加えて)
- remove/clear/getOr/keysStr/valuesStr/toJson実装
- keys()/values()のランタイムシムサポート(TypeBox待ち)

その他の改善:
- Phase 11.9(文法統一化)ドキュメント追加
- Phase 16(FoldLang)ドキュメント追加
- 非同期タイムアウトテスト追加
- 各種ビルド警告(未使用import等)は次のリファクタリングで対応予定

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-02 09:26:09 +09:00

273 lines
10 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

================================================================================
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<Mutex>パターンの自動化(-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<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」体験
└─ コントリビューション容易化
■ コード削減の具体例
├─ 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の究極の姿。