Files
hakorune/docs/development/roadmap/phases/phase-15/README.md
Selfhosting Dev 1d6fab4eda 📚 Phase 15計画を詳細化・更新: Python/llvmlite正式採用とプラグイン全方向ビルド戦略
 主な更新内容:
- Python/llvmlite実装の正式採用を明記(開発速度10倍、~2400行)
- プラグイン全方向ビルド戦略(.so/.o/.a同時生成)で単一EXE生成可能に
- 各実装の予想コード量を具体化(パーサー800行、MIR Builder 2500行、VM 5000行)
- 循環依存問題の解決を明記(nyrtがC ABI経由で提供)
- 現実的なスケジュール調整(2025年9月~2026年3月)

🎉 最新進捗:
- dep_tree_min_string.nyashオブジェクト生成成功(10.4KB)
- LLVM verifier green - dominance違反解決
- Resolver patternでSSA安全性確保

🚀 次のマイルストーン:
- Python/llvmliteでEXE生成パイプライン完成
- nyash-llvm-compiler分離設計
- NyashパーサーMVP実装開始

Everything is Boxの究極形が、ついに実現へ!

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-13 15:37:58 +09:00

280 lines
10 KiB
Markdown
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セルフホスティング - 世界一美しい箱の完成
## 📋 概要
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%削減で保守性・可読性の革命
## 🚀 実装戦略2025年9月更新
### Phase 15.2: LLVM層の独立化実装中
- **Python/llvmlite実装を正式採用**開発速度10倍、~2400行
- nyash-llvm-compiler crateの分離Rust版も継続
- MIR JSON/バイナリ入力 → ネイティブEXE出力
- プラグイン全方向ビルド戦略(.so/.o/.a同時生成
- 独立したツールとして配布可能
### Phase 15.3: Nyashコンパイラ実装
- NyashでNyashパーサー実装800行目標
- AST→MIR変換2500行目標
- **循環依存なし**nyrtがStringBox/ArrayBoxをC ABI経由で提供
- ブートストラップでセルフホスティング達成!
### Phase 15.4: VM層のNyash化革新的
- MIR解釈エンジンをNyashで実装~5000行予想
- 動的ディスパッチMapBoxで13命令処理
- コンパイル不要の即座実行
- デバッグ・開発効率の劇的向上
詳細:[セルフホスティング戦略 2025年9月版](implementation/self-hosting-strategy-2025-09.md)
## 📊 主要成果物
### コンパイラコンポーネント
- [ ] 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%
- **合計**: 80,000行→20,000行75%削減)
### 実装例
```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ファイル生成・リンク戦略
### 統合ツールチェーン
```bash
# Cranelift版一時停止中
nyash build main.ny --backend=cranelift --target=x86_64-pc-windows-msvc
# LLVM版ChatGPT5実装中
nyash build main.ny --backend=llvm --emit exe -o program.exe
```
### 実装戦略
#### LLVM バックエンド(優先)
1. **MIR→LLVM IR**: MIR13をLLVM IRに変換✅ 実装済み)
2. **LLVM IR→Object**: ネイティブオブジェクトファイル生成(✅ 実装済み)
3. **Python/llvmlite実装**: Resolver patternでSSA安全性確保✅ 実証済み)
4. **Object→EXE**: リンカー統合でEXE作成🚀 実装中)
5. **独立コンパイラ**: `nyash-llvm-compiler` crateとして分離📝 計画中)
詳細は[**LLVM EXE生成戦略**](implementation/llvm-exe-strategy.md)を参照。
#### Cranelift バックエンド(保留)
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戦略**](implementation/lld-strategy.md)を参照。
## 🔗 関連ドキュメント
### 📂 実装関連implementationフォルダ
- [🚀 LLVM EXE生成戦略](implementation/llvm-exe-strategy.md)NEW
- [🚀 自己ホスティングlld戦略](implementation/lld-strategy.md)Cranelift版
- [🧱 箱積み上げ準備メモ](implementation/box-stacking.md)
- [🏗️ アーキテクチャ詳細](implementation/architecture.md)
### 📅 計画関連planningフォルダ
- [📋 推奨実装順序](planning/sequence.md)
- [🔧 準備作業まとめ](planning/preparation.md)
### 🔧 実行チェックリスト
- [ROADMAP.md](ROADMAP.md) - 進捗管理用チェックリスト
### 📚 関連フェーズ
- [Phase 10: Cranelift JIT](../phase-10/)
- [Phase 12.5: 最適化戦略](../phase-12.5/)
- [Phase 12.7: ANCP圧縮](../phase-12.7/)
- [Phase 15.1: AOT計画](phase-15.1/)
## 📅 実施時期(修正版)
- **現在進行中**2025年9月
- Python/llvmlite実装でブレークスルー
- dep_tree_min_string.nyashオブジェクト生成成功
- **Phase 15.2**: LLVM独立化2025年9-10月完成予定
- **Phase 15.3**: Nyashコンパイラ2025年11-12月
- **Phase 15.4**: VM層Nyash化2026年1-3月
- **Phase 15.5**: ABI移行LLVM完成後、必要に応じて
## 💡 期待される成果
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.so/.o/.a全方向対応
- すべてがBox
**世界一美しい箱は、自分自身さえも美しく包み込む**
### 🚀 次のマイルストーン
- ✅ LLVM dominance違反解決Resolver pattern
- 🚀 Python/llvmliteでEXE生成パイプライン完成
- 📝 nyash-llvm-compiler分離設計
- 📝 NyashパーサーMVP実装開始