Files
hakorune/docs/development/roadmap/phases/phase-16/fold-lang-design.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

181 lines
7.3 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 16: 折りたたみ言語FoldLang設計 - ChatGPT5提案
================================================================================
【概要】
セルフホスティング達成後の次なる進化。
"Everything is Box"を土台に、等価変換でプログラムを畳む/展開する最適化層。
MIR15は増やさず、BoxCall列を書き換えるだけで実用速度を実現。
================================================================================
1. コア思想Fold = 等価変換の一段)
================================================================================
■ 公理Fold Laws
├─ 等価性: unfold(fold(P)) = Ptrace_hash/heap_hash一致
├─ 安全点保持: 折畳み後もsafepoint入口/背縁/await前後を保存
└─ 純度境界: #[ny.pure] / #[ny.readonly] / #[ny.nothrow] の範囲のみ自動融合
■ 層構造
Nyash → MIR15 → (FoldPass/FIR) → {VM/Clif/LLVM/x86}
└─ MIRは増やさず、BoxCall列を書き換えるだけ
================================================================================
2. 何が畳める?(期待できる進化)
================================================================================
■ A. データ・ストリーム融合Map/Filter/Reduce
├─ 連鎖したBoxCallを1回に畳む配列/文字列/マップ/JSON
├─ 例: arr.map(f).filter(p).map(g) → arr.fused([Map(f), Filter(p), Map(g)])
└─ 効果: Box境界・アロケーション・バリア回数を削減P95 -10〜40%期待)
■ B. 非同期の塊化(構造化並行)
├─ TaskGroup.spawn(..)* → joinAll() を1グループ命令に畳む
└─ await前後のsafepointは保持、キャンセル/タイムアウトを最短経路で扱う
■ C. GUI/シーン構築の一括ビルド
├─ Scene.add(Button).add(Label).add(Grid…) → Scene.fused(buildlist)
└─ 初期描画を1回に集約レイアウト/フォント測定をまとめて実行)
■ D. I/Oバッチ化
├─ FileBox.read(x).read(y).read(z) → FileBox.readv([x,y,z])
└─ SocketBox.send(a).send(b) → sendv([a,b])
■ E. ループ域内の局所折りたたみ
├─ ループ本体の純パスだけを畳み、背縁safepointを残す
└─ 例: for x in arr { y = g(f(x)) } # g∘fを一体化
================================================================================
3. 安全ガード(壊れないための制約)
================================================================================
■ 副作用検出
└─ #[ny.may_write(box=…)] 等の注釈が付いた経路は折畳み対象外
■ バリア規律
└─ barrier_{read,write} の相対順序を保持Lowererが再挿入可能
■ 観測可能性
└─ --unfold でいつでも展開実行に切替(デバッグ容易)
■ しきい値制御
└─ P95 +3% を超えたら自動で折畳みOFFFold Budget
================================================================================
4. ツールとメトリクス
================================================================================
■ Fold Inspector
└─ before/after のBoxCall DAG・削減率・safepoint位置を可視化
■ Fold Budget
└─ 実行時に効果を測って自動ON/OFF回帰防止
■ Unfold-on-error
└─ 例外発生時は即展開で再実行(原因特定用)
================================================================================
5. 実装ロードマップ(段階導入)
================================================================================
■ v012週
├─ 対象: Array.map/filter/map など純関数パイプ長さ≤3
├─ 仕組み: 属性タグ収集 → 連鎖検出 → fused([...]) 置換 → NyRT ny_array_fused へ
└─ テスト: trace/heap_hash 一致、gc=sync/stress(k) 緑
■ v1
├─ ループ内の局所折畳み背縁safepointを保持
└─ I/Oのreadv/sendvバッチ化
■ v2
├─ TaskGroup の塊化spawn*→joinAll
├─ GUI初期構築の一括ビルド
└─ --unfold と Inspector を標準同梱
================================================================================
6. Nyash側APIの薄い拡張MIRそのまま
================================================================================
■ 属性
├─ #[ny.pure] # 副作用なし、参照透明
├─ #[ny.readonly] # 読み取りのみ、状態変更なし
├─ #[ny.nothrow] # 例外を投げない
├─ #[ny.fold(barrier="keep")] # 折畳み制御
└─ #[ny.unfold] # デバッグ用展開強制
■ FIR内部表現ード
└─ Fused(BoxId, [Op…])ただのBoxCallの糖
■ NyRT追加
├─ ny_array_fused
├─ ny_scene_fused
└─ ny_io_readv/sendv
================================================================================
7. 具体イメージ最小のv0例
================================================================================
# ユーザーコード
let out = arr.map(f).filter(p).map(g)
# MIR15概念
%a1 = BoxCall Array.map [%arr, %f]
%a2 = BoxCall Array.filter [%a1, %p]
%a3 = BoxCall Array.map [%a2, %g]
# FoldPass v0
%fused = BoxCall Array.fused [%arr, [Map(f), Filter(p), Map(g)]]
================================================================================
8. 効果予測(現実的な数値)
================================================================================
■ Array操作
├─ アロケーション削減により30-40%高速化
├─ メモリ使用量: 中間配列削除で50%削減
└─ GC圧力: Box生成数が1/3になり、GC頻度低下
■ ループ処理
├─ ループ回数削減により実行時間1/3
└─ キャッシュ効率向上
■ 非同期処理
├─ コンテキストスイッチ削減
└─ レイテンシ改善
================================================================================
9. セルフホスティング後に実装する理由
================================================================================
1. 複雑性の分離
- セルフホスティングは「動くこと」が最優先
- 最適化は「速くすること」が目的
- 混ぜると両方失敗するリスク
2. ドッグフーディング
- Nyashで最適化パスを書く
- 言語の表現力を証明
- コミュニティが貢献しやすい
3. 段階的成功
- Phase 15: 動くコンパイラ15,000行
- Phase 16: 速いコンパイラ(+3,000行
- 各段階で明確な成果
================================================================================
10. まとめ
================================================================================
折りたたみ言語 = "Box世界の合成最適化層"
- MIR15は増やさない
- BoxCall列を等価変換で融合
- 必要ならいつでもunfold
- 効果は速度×省メモリ×デバッグ容易
Nyashの「箱理論」を実用速度へ直結する次のステップ。
セルフホスティング達成後の楽しみ!
================================================================================
注記: ChatGPT5による革新的提案2025-09-01
================================================================================