Phase 12.7文法改革: ドキュメント文法統一 + VMリファクタリング準備

🌟 Phase 12.7文法改革に基づくドキュメント更新
- init {} → field: TypeBox 個別フィールド宣言形式
- init() → birth() コンストラクタ統一
- pack() → 廃止(birth()に統一)
- public {}/private {} → 個別フィールド修飾子
- override → 廃止(メソッド定義はシンプルに)

📚 更新したドキュメント
- CLAUDE.md: メイン開発ガイド
- docs/quick-reference/syntax-cheatsheet.md: 構文早見表
- docs/reference/language/LANGUAGE_REFERENCE_2025.md: 言語リファレンス
- docs/development/roadmap/phases/phase-15/README.md: Phase 15計画

🔧 VMリファクタリング準備
- vm_methods.rs: VMメソッド呼び出しの分離
- plugin_loader.rs → plugin_loader/: ディレクトリ構造化
- mir/builder/exprs.rs: 式ビルダー分離

📝 新規ドキュメント追加
- 論文戦略・ロードマップ
- Phase 15セルフホスティング準備資料
- Codex Androidセットアップガイド

ビルドは正常に通ることを確認済み!🎉

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-09-04 06:27:39 +09:00
parent 6488b0542e
commit 4e824fa00e
27 changed files with 2804 additions and 1656 deletions

View File

@ -21,7 +21,9 @@ MIR 13命令の美しさを最大限に活かし、外部コンパイラ依存
- [ ] Nyashパーサー800行目標
- [ ] MIR Lowerer2,500行目標
- [ ] CraneliftBoxJITエンジンラッパー
- [ ] LinkerBoxリンカー統合
- [ ] LinkerBoxlld内蔵リンカー統合)
- [ ] nyashrtランタイム静的/動的ライブラリ)
- [ ] ToolchainBox環境診断・SDK検出
### 自動生成基盤
- [ ] boxes.yamlBox型定義
@ -46,12 +48,14 @@ MIR 13命令の美しさを最大限に活かし、外部コンパイラ依存
この究極のシンプルさにより、直接x86変換も現実的に
### バックエンドの選択肢
#### 1. Cranelift(現在の主力
#### 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エミッタ革新的アプローチ
#### 2. 直接x86エミッタ将来の革新的アプローチ)
- **dynasm-rs/iced-x86**: Rust内で直接アセンブリ生成
- **テンプレート・スティッチャ方式**: 2-3KBの超小型バイナリ可能
- **完全な制御**: 依存ゼロの究極形
@ -66,7 +70,15 @@ MIR 13命令の美しさを最大限に活かし、外部コンパイラ依存
```nyash
// 80,000行のRust実装が20,000行のNyashに
box NyashCompiler {
init { parser, lowerer, backend }
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)
@ -77,10 +89,34 @@ box NyashCompiler {
// 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)
}
}
```
### テンプレート・スティッチャ方式(革新的アプローチ)
@ -113,23 +149,36 @@ box TemplateStitcher {
## 🔗 EXEファイル生成・リンク戦略
### 段階的アプローチ
1. **Phase 1**: 外部リンカーlld/gcc利用
2. **Phase 2**: lld内蔵で配布容易化
3. **Phase 3**: ミニリンカー自作(究極の自立)
### 統合ツールチェーン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境界設計
- **プレフィクス**: `ny_v1_*`で統一
- **呼出規約**: Windows(fastcall) / Linux(sysv_amd64)
- **必須関数**: `ny_init()`, `ny_fini()`
- **型マッピング**: `ny_handle=uint64_t`
```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/)
## 📅 実施時期

View File

@ -0,0 +1,149 @@
Phase 15 自己ホスティング準備メモ - 箱積み上げ戦略
=================================================
Date: 2025-09-03
Author: Claude + にゃ
■ 基本理念:箱を下にして積み重ねる
=====================================
フォールバック不要、Rust依存なしEXEライブラリのみ
一度置いた箱は動かさない
下の箱が安定なら、上も安定
複雑さは敵、シンプルさは友
■ 基礎Box群の階層構造
======================
第1層最下層これがないと何も始まらない
├── MemoryBox // メモリ管理
├── StringBox // 文字列処理
├── ArrayBox // 配列操作
├── MapBox // 連想配列
└── ErrorBox // エラー処理
第2層言語処理の基礎
├── TokenBox // 字句解析
├── ASTBox // 構文木
├── SymbolBox // シンボルテーブル
└── ScopeBox // スコープ管理
第3層コンパイラコア
├── ParserBox // パーサー
├── MIRBox // 中間表現13命令
├── OptimizerBox // 最適化
└── GeneratorBox // コード生成
第4層実行系
├── InterpreterBox // インタープリター
├── VMBox // 仮想マシン
├── JITBox // JITコンパイラCranelift
└── LinkerBox // リンカーlld
■ 準備期間の研究項目
====================
1. 依存関係マップ作成
- 何が何に依存?
- 最小限の依存で最大の効果
- 循環依存の排除
2. インターフェース設計
- 全Boxの共通プロトコル
- 入力/出力の標準化
- エラー処理の統一
3. ビルド順序の科学
- Day 1: 基礎Box群
- Day 2: 言語処理層
- Day 3: コンパイラ層
- 完成まで一直線
4. 最小ブートストラップセット
- 自分自身をコンパイルできる最小構成
- 必須機能の特定
- 段階的な機能追加
■ 箱の品質保証原則
==================
1. 単体で完結 - 他に依存しすぎない
2. 明確な責務 - 1つの箱は1つの仕事
3. テスト可能 - 単独で動作確認
4. 不変インターフェース - 一度決めたら変更なし
■ 実装戦略
==========
1. Rust実装の機能分解Box単位
2. 各Boxの仕様書作成
3. テストケースの移植計画
4. Box間プロトコル設計
5. 最小実装から始める
6. 増分的に機能追加
■ 成功の鍵
==========
- 準備こそすべて
- 急いで実装より、じっくり設計
- 箱を積み重ねれば必ず頂上に到達
- フォールバックなし、後戻りなし、前進あるのみ
■ 革新的アイデア
================
1. BoxDNA設計書
- 各Boxの入力/出力/依存を明文化
- 遺伝子のように継承・組み合わせ
2. 増分コンパイル対応
- 変更部分だけ再コンパイル
- 開発効率の向上
3. 可視化ツール
- 進捗の見える化
- 依存関係の図示
■ 数値目標
==========
- 80,000行 → 20,000行75%削減)
- MIR13命令で全機能実現
- ビルド時間1分以内
- テストカバレッジ90%以上
■ コンテキスト圧縮対策
======================
1. ANCP活用Phase 12.7
- 90%圧縮でAIコンテキスト節約
- [ANCP仕様書](../../phase-12.7/ancp-specs/ANCP-Token-Specification-v1.md)
2. モジュール分割開発
- 各Boxを独立して開発
- 統合は最後に実施
3. AI協調開発
- Claude実装担当
- ChatGPT5リファクタリング
- Geminiレビュー
- Codexデバッグ支援
■ 関連ドキュメント
==================
- [自己ホスティングlld戦略](self-hosting-lld-strategy.md)
- [Phase 15 README](README.md)
- [Phase 12.7 ANCP](../../phase-12.7/)
- [MIR13命令セット](../../../../reference/mir/INSTRUCTION_SET.md)
■ 次のアクション
================
1. このメモをベースに詳細設計
2. Box依存関係グラフの作成
3. 最小実装セットの確定
4. 各Boxの仕様書ドラフト
=====================================
「箱を積み上げて、世界一美しいコンパイラを作るにゃ!」

View File

@ -0,0 +1,196 @@
# Phase 15 自己ホスティング実装戦略 - MIR→Cranelift→lld
Author: ChatGPT5 + Claude協議
Date: 2025-09-03
Version: 1.0
## 📋 概要
Nyash完全自己ホスティングを実現するための具体的実装戦略。
**「MIR→Craneliftで.o/.objを作る→lldでEXEを組む」**をNyashツールチェーンに内蔵する。
## 🎯 最終形(自己ホスト時の一発ボタン)
```bash
nyash build main.ny \
--backend=cranelift \
--target=x86_64-pc-windows-msvc # or x86_64-unknown-linux-gnu
```
内部処理フロー:
1. **frontend**: AST→MIR13
2. **codegen**: MIR→Cranelift→`.obj/.o`
3. **link**: `lld-link`(Win) / `ld.lld`(Linux)でEXE生成
4. 依存ランタイム`nyashrt`を自動リンク(静的/動的選択)
## 🏗️ 実装の芯(最小で美しいやつ)
### 1. コード生成ライブラリ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) // メモリ解放
// エラーハンドリング
// 例外は戻り値NyErrunwind禁止
```
実装のポイント:
- 返却メモリは`ny_free_buf`で解放
- 例外は戻り値NyErrで統一unwind禁止
- C ABIで安定した境界を作る
### 2. リンカー・ラッパ(プラットフォーム別)
#### Windows
- 既定: `lld-link`
- 主要フラグ:
```bash
lld-link <objs...> nyashrt.lib /SUBSYSTEM:CONSOLE \
/OUT:a.exe /ENTRY:nyash_entry \
/LIBPATH:<sdk/lib> /MACHINE:X64
```
- MSVC互換が要る配布向けに`/fallback:link.exe`オプションも用意可
#### Linux
- 既定: `ld.lld`(開発で`mold`併用可)
```bash
ld.lld -o a.out main.o -L. -lnyashrt -lc -lm -pthread \
--gc-sections --icf=all
```
#### macOS将来
- 日常は`ld64.lld`、配布はXcodeの`ld64` + コード署名要Entitlements
### 3. 同梱/検出戦略
**優先順**: 埋め込み`lld` → システム`lld` → 代替mold/link.exe/ld64
```bash
nyash toolchain doctor # 検出&パス設定
--linker=lld|mold|link.exe|ld64 # 明示上書き
```
### 4. ランタイム同梱
- `nyashrt`を**static.a/.lib**と**shared.so/.dll**両用意
- 既定は**static**(配布が楽)、`--shared-rt`で動的リンクに切替
- Windowsは**PDB生成**、Linuxは`-g`/`-Wl,--build-id`でデバッグ容易に
## 🔧 エラー整合(ビルド失敗をわかりやすく)
| エラー種別 | 戻り値 | 説明・対処 |
|----------|-------|-----------|
| `ny_mir_to_obj`失敗 | `NYCG_ERR_*` | ターゲット不一致/CLIF生成失敗など |
| リンク失敗 | リンカ標準出力 | ファイル名/未解決シンボルを整形表示 |
診断オプション:
```bash
--emit=clif,asm,obj,link-cmd # 診断をファイル出力(再現しやすい)
```
## 💾 キャッシュ&クロスコンパイル
### オブジェクトキャッシュ
`hash(MIR, target, codegen_ver)``.obj/.o`を再利用
### クロスコンパイル
```bash
--target=<triple> # .obj/.oとリンク器/SDKを切替
```
- Win用: `x86_64-pc-windows-msvc``lld-link` + MSVCライブラリ
- Linux: `x86_64-unknown-linux-gnu``ld.lld` + glibc
**Zig toolchain**を併用するとクロス用のCRT/SDKが楽内部はlld
## 🎨 使いやすいCLI例
```bash
nyash build main.ny --backend=cranelift --release
nyash build main.ny --emit=obj,asm,clif # 解析用
nyash run main.ny --backend=cranelift # JITで即実行
nyash toolchain doctor # lld/SDK検出
```
## ⚡ 地味に効く最適化スイッチ
### リンカ最適化
- `ld.lld`: `--gc-sections --icf=all`(不要コード除去&同一関数折りたたみ)
### Cranelift最適化
- `opt_level=speed`
- TypedArrayの**bounds-check併合**をLowerで実装
### 実行時最適化
- 起動時CPUIDで**関数ポインタ切替**AVX2/512の専用小関数
## ✅ 最初の"動くまで"チェックリスト
- [ ] `ny_mir_to_obj`C ABI`.o/.obj`を返せる
- [ ] `nyash link <obj> --target=<triple>``lld`でEXEを作れる
- [ ] Windows/Linuxそれぞれ"Hello, Box!"実行成功
- [ ] `--emit=clif,asm`でダンプが落ちる
- [ ] 失敗時のエラーメッセージが**ファイル名+未解決シンボル**まで出る
- [ ] `nyash toolchain doctor`でlld/SDK検出
## 📐 実装設計詳細
### LinkerBox設計
```nyash
box LinkerBox {
init { platform, linker_path, libraries, flags }
link(objects, output_path) {
local cmd = me.build_link_command(objects, output_path)
local result = me.execute_linker(cmd)
if result.exit_code != 0 {
me.format_link_error(result.stderr)
}
return result
}
detect_linker() {
// 優先順: 内蔵lld → システムlld → 代替
if me.has_embedded_lld() {
return me.extract_embedded_lld()
}
return me.find_system_linker()
}
}
```
### CraneliftBox統合
```nyash
box CraneliftBox {
init { target_triple, opt_level }
compile(mir) {
// MIR13 → Cranelift IR → Object
local module = me.create_module()
for inst in mir.instructions {
me.lower_instruction(module, inst)
}
return module.compile()
}
}
```
## 🌟 まとめ
- **Yes**: CraneliftでEXEにするには**内部でlldを叩く機能を埋め込む**のが正攻法
- 仕組みは**MIR→Cranelift .o/.obj → lld**
- C ABIファサード経由でcodegenを呼び、リンカは**内蔵ドライバ**で統一
- これで**自己ホスト→即EXE生成**の"気持ちいい体験"が完成!
## 🔗 関連ドキュメント
- [Phase 15メインドキュメント](README.md)
- [C ABI境界設計](../phase-12/c-abi-spec.md)
- [MIR 13命令セット](../../reference/mir/INSTRUCTION_SET.md)
- [Cranelift統合](../phase-10/)