主な成果: - 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>
273 lines
10 KiB
Plaintext
273 lines
10 KiB
Plaintext
================================================================================
|
||
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週間)
|
||
├─ 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の究極の姿。 |