Files
hakorune/docs/development/roadmap/phases/phase-15/README.md

220 lines
7.3 KiB
Markdown
Raw Normal View History

# Phase 15: Nyashセルフホスティング - 世界一美しい箱の完成
## 📋 概要
NyashでNyashコンパイラを書く、完全なセルフホスティングの実現フェーズ。
MIR 13命令の美しさを最大限に活かし、外部コンパイラ依存から完全に解放される。
**究極の目標80,000行→20,000行75%削減)→ さらなる最適化へ**
## 🎯 フェーズの目的
1. **完全なセルフホスティング**: NyashコンパイラをNyashで実装
2. **外部依存の排除**: gcc/clang/MSVC不要の世界
3. **Everything is Box哲学の完成**: コンパイラもBox
4. **エコシステムの自立**: Nyashだけで完結する開発環境
5. **劇的なコード圧縮**: 75%削減で保守性・可読性の革命
## 📊 主要成果物
### コンパイラコンポーネント
- [ ] CompilerBox実装統合コンパイラ
- [ ] Nyashパーサー800行目標
- [ ] MIR Lowerer2,500行目標
- [ ] CraneliftBoxJITエンジンラッパー
- [ ] LinkerBoxlld内蔵リンカー統合
- [ ] nyashrtランタイム静的/動的ライブラリ)
- [ ] ToolchainBox環境診断・SDK検出
### 自動生成基盤
- [ ] boxes.yamlBox型定義
- [ ] externs.yamlC ABI境界
- [ ] semantics.yamlMIR15定義
- [ ] build.rs自動生成システム
### ブートストラップ
- [ ] c0→c1コンパイル成功
- [ ] c1→c1'自己コンパイル
- [ ] パリティテスト合格
## 🔧 技術的アプローチ
### MIR 13命令の革命
- **基本演算(5)**: Const, UnaryOp, BinOp, Compare, TypeOp
- **メモリ(2)**: Load, Store
- **制御(4)**: Branch, Jump, Return, Phi
- **Box(1)**: BoxCallすべての箱操作を統合
- **外部(1)**: ExternCall
この究極のシンプルさにより、直接x86変換も現実的に
### バックエンドの選択肢
#### 1. Cranelift + lld内蔵ChatGPT5推奨
- **軽量**: 3-5MB程度LLVMの1/10以下
- **JIT特化**: メモリ上での動的コンパイル
- **Rust統合**: 静的リンクで配布容易
- **lld内蔵**: Windows(lld-link)/Linux(ld.lld)で完全自立
- **C ABIファサード**: `ny_mir_to_obj()`で美しい境界
#### 2. 直接x86エミッタ将来の革新的アプローチ
- **dynasm-rs/iced-x86**: Rust内で直接アセンブリ生成
- **テンプレート・スティッチャ方式**: 2-3KBの超小型バイナリ可能
- **完全な制御**: 依存ゼロの究極形
### コード削減の秘密
- **Arc<Mutex>自動化**: 明示的ロック管理不要(-30%
- **型システム簡略化**: 動的型付けの恩恵(-20%
- **エラー処理統一**: Result<T,E>地獄からの解放(-15%
- **動的ディスパッチ**: match文の大幅削減-10%
### 実装例
```nyash
// 80,000行のRust実装が20,000行のNyashに
box NyashCompiler {
parser: ParserBox
lowerer: LowererBox
backend: BackendBox
birth() {
me.parser = new ParserBox()
me.lowerer = new LowererBox()
me.backend = new BackendBox()
}
compile(source) {
local ast = me.parser.parse(source)
local mir = me.lowerer.lower(ast)
return me.backend.generate(mir)
}
}
// MIR実行器も動的ディスパッチで簡潔に
box MirExecutor {
values: MapBox
birth() {
me.values = new MapBox()
}
execute(inst) { return me[inst.type](inst) }
Const(inst) { me.values[inst.result] = inst.value }
BinOp(inst) { /* 実装 */ }
}
// lld内蔵リンカーChatGPT5協議
box LinkerBox {
platform: PlatformBox
lld_path: StringBox
libraries: ArrayBox
birth(platform) {
me.platform = platform
me.lld_path = platform.findLldPath()
me.libraries = new ArrayBox()
}
link(objects, output) {
local cmd = me.build_command(objects, output)
return me.platform.execute(cmd)
}
}
```
### テンプレート・スティッチャ方式(革新的アプローチ)
```nyash
// 各MIR命令を共通スタブとして実装
box TemplateStitcher {
init { stubs }
constructor() {
me.stubs = new MapBox()
// 各命令の共通実装をスタブとして登録
me.stubs.set("Const", 0x1000) // スタブアドレス
me.stubs.set("BinOp", 0x1100)
me.stubs.set("BoxCall", 0x1200)
// ... 13命令分のスタブ
}
generate(mir) {
local jumps = new ArrayBox()
// プログラムはスタブ間のジャンプ列に!
for inst in mir.instructions {
jumps.push("jmp " + me.stubs.get(inst.type))
}
return jumps // 超小型バイナリ!
}
}
```
## 🔗 EXEファイル生成・リンク戦略
### 統合ツールチェーンChatGPT5協議済み
```bash
nyash build main.ny --backend=cranelift --target=x86_64-pc-windows-msvc
```
### 実装戦略
1. **MIR→Cranelift**: MIR13をCranelift IRに変換
2. **Cranelift→Object**: ネイティブオブジェクトファイル生成(.o/.obj
3. **lld内蔵リンク**: lld-linkWin/ld.lldLinuxでEXE作成
4. **nyashrtランタイム**: 静的/動的リンク選択可能
### C ABI境界設計
```c
// 最小限の美しいインターフェース
ny_mir_to_obj(mir_bin, target_triple) -> obj_bytes
ny_mir_jit_entry(mir_bin) -> exit_code
ny_free_buf(buffer)
```
詳細は[**自己ホスティングlld戦略**](self-hosting-lld-strategy.md)を参照。
## 🔗 関連ドキュメント
- [🚀 自己ホスティングlld戦略](self-hosting-lld-strategy.md) **← NEW!**
- [🧱 箱積み上げ準備メモ](box-stacking-preparation.txt) **← NEW!**
- [セルフホスティング詳細計画](self-hosting-plan.txt)
- [技術的実装詳細](technical-details.md)
- [Phase 10: Cranelift JIT](../phase-10/)
- [Phase 12.5: 最適化戦略](../phase-12.5/)
- [Phase 12.7: ANCP圧縮](../phase-12.7/)
## 📅 実施時期
- **開始条件**: Phase 10-14完了後
- **推定開始**: 2026年前半
- **推定期間**: 6-8ヶ月
- **早期着手**: YAML自動生成は今すぐ開始可能
## 💡 期待される成果
1. **技術的証明**: 実用言語としての成熟度
2. **開発効率**: Nyashだけで開発完結
3. **教育価値**: 15,000行で読破可能なコンパイラ
4. **コミュニティ**: 参入障壁の大幅低下
5. **保守性革命**: 75%削減で誰でも改造可能
## 🌟 夢の実現
> 「コンパイラもBox、リンカーもBox、すべてがBox」
> 「71,000行→15,000行、これが革命」
外部ツールチェーンに依存しない、真の自立したプログラミング言語へ。
### 数値で見る革命
- **現在**: 80,000行Rust実装
- **第一目標**: 20,000行Nyashセルフホスティング、**75%削減**
- **究極の夢**: さらなる最適化でより小さく!
- **MIR命令数**: たった13個で全機能実現
- **理解容易性**: 週末で読破可能なコンパイラ
- **バイナリサイズ**: テンプレート方式なら2-3KBも可能
- **教育的価値**: 世界一美しく、世界一小さい実用コンパイラ
### 🌟 Everything is Boxの究極形
- コンパイラもBox
- リンカーもBox
- アセンブラもBox
- すべてがBox
**世界一美しい箱は、自分自身さえも美しく包み込む**