主な成果: - 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>
181 lines
7.3 KiB
Plaintext
181 lines
7.3 KiB
Plaintext
================================================================================
|
||
Phase 16: 折りたたみ言語(FoldLang)設計 - ChatGPT5提案
|
||
================================================================================
|
||
|
||
【概要】
|
||
セルフホスティング達成後の次なる進化。
|
||
"Everything is Box"を土台に、等価変換でプログラムを畳む/展開する最適化層。
|
||
MIR15は増やさず、BoxCall列を書き換えるだけで実用速度を実現。
|
||
|
||
================================================================================
|
||
1. コア思想(Fold = 等価変換の一段)
|
||
================================================================================
|
||
|
||
■ 公理(Fold Laws)
|
||
├─ 等価性: unfold(fold(P)) = P(trace_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% を超えたら自動で折畳みOFF(Fold Budget)
|
||
|
||
================================================================================
|
||
4. ツールとメトリクス
|
||
================================================================================
|
||
|
||
■ Fold Inspector
|
||
└─ before/after のBoxCall DAG・削減率・safepoint位置を可視化
|
||
|
||
■ Fold Budget
|
||
└─ 実行時に効果を測って自動ON/OFF(回帰防止)
|
||
|
||
■ Unfold-on-error
|
||
└─ 例外発生時は即展開で再実行(原因特定用)
|
||
|
||
================================================================================
|
||
5. 実装ロードマップ(段階導入)
|
||
================================================================================
|
||
|
||
■ v0(1–2週)
|
||
├─ 対象: 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)
|
||
================================================================================ |