diff --git a/docs/papers/README.md b/docs/papers/README.md index 9f4cf96b..faf39bd3 100644 --- a/docs/papers/README.md +++ b/docs/papers/README.md @@ -6,10 +6,14 @@ ``` papers/ -├── README.md # このファイル +├── README.md # このファイル(全候補への索引) ├── active/ # 現在執筆中の論文 │ ├── paper-a-mir13-ir-design/ # 論文A: MIR13命令とIR設計 -│ └── paper-b-nyash-execution-model/ # 論文B: Nyash言語と実行モデル +│ ├── paper-b-nyash-execution-model/ # 論文B: Nyash言語と実行モデル +│ ├── paper-c-ancp-compression/ # 論文C: ANCP 90%圧縮技法(世界記録) +│ ├── paper-d-jit-to-exe/ # 論文D: JIT→EXE統合パイプライン +│ ├── three-papers-strategy.md # 3論文戦略の統合計画 +│ └── WHICH_PAPER_FIRST.md # 論文優先順位の検討(15個候補) ├── archive/ # 過去の検討・下書き │ ├── initial-proposals/ # 初期提案資料 │ ├── mir15-implementation/ # 旧MIR15論文 @@ -20,7 +24,7 @@ papers/ └── templates/ # 論文テンプレート ``` -## 📊 現在の論文プロジェクト(2本立て戦略) +## 📊 現在の論文プロジェクト(主要2本 + 追加候補多数) ### 論文A: MIR13命令とIR設計 🎯 **主題**: 中間表現(MIR)の統合設計 @@ -60,6 +64,25 @@ papers/ ## 🔗 関連ドキュメント +### 📝 論文候補への索引(15個以上!) +- **[15個の論文候補一覧](active/WHICH_PAPER_FIRST.md)** - すべての候補リスト +- **[3論文戦略](active/three-papers-strategy.md)** - 段階的発表計画 +- **[Paper A: MIR13](active/paper-a-mir13-ir-design/)** - 13命令IR設計 +- **[Paper B: Nyash](active/paper-b-nyash-execution-model/)** - 言語実行モデル +- **[Paper C: ANCP](active/paper-c-ancp-compression/)** - 90%圧縮技法 +- **[Paper D: JIT-EXE](active/paper-d-jit-to-exe/)** - 統合パイプライン + +### 🎯 他の論文アイデア所在地 +- **[研究フォルダ](../research/)** - Box理論JIT、1ヶ月実装記録など5個以上 +- **[アイデアフォルダ](../ideas/)** - 新規提案候補 +- **[AI相談記録](../../sessions/)** - WebBox革命、AI協働方法論など + +### 📊 執筆支援ドキュメント +- [論文執筆戦略](active/PAPER_WRITING_STRATEGY.md) +- [論文分割戦略](active/PAPER_DIVISION_STRATEGY.md) +- [ベンチマークアプリ推奨](active/BENCHMARK_APP_RECOMMENDATIONS.md) + +### 🔧 開発関連 - [開発ロードマップ](../development/roadmap/) - [技術仕様](../reference/) -- [現在のタスク](../development/current/CURRENT_TASK.md) \ No newline at end of file +- [現在のタスク](../../CURRENT_TASK.md) diff --git a/docs/papers/active/paper-a-mir13-ir-design/main-paper-jp.md b/docs/papers/active/paper-a-mir13-ir-design/main-paper-jp.md new file mode 100644 index 00000000..6cfd8872 --- /dev/null +++ b/docs/papers/active/paper-a-mir13-ir-design/main-paper-jp.md @@ -0,0 +1,276 @@ +# MIR13: Everything is Boxによる究極のミニマル中間表現 + +## 概要 + +本論文では、わずか13命令で実用的なアプリケーションの実装を可能にする革新的な中間表現(IR)設計「MIR13」を提案する。従来のIR設計では数十から数百の命令が必要とされてきたが、我々は「Everything is Box」という設計哲学に基づき、すべてのメモリアクセスをBoxCallに統一することで、Load/Store命令を完全に廃止した。実装では12命令への削減も可能だが、可読性を考慮して意図的に13命令を採用している。MIR13はInterpreter、VM、JITの3つの実行バックエンドで実証され、実用的なアプリケーションの動作を確認した。 + +## 1. はじめに + +プログラミング言語の中間表現(IR)は、高水準言語と機械語の橋渡しをする重要な抽象層である。LLVM IRは約60の基本命令、WebAssemblyは約170の命令を持つなど、既存のIRは複雑化の一途を辿っている。 + +本研究では、逆転の発想により「どこまでIRを単純化できるか」に挑戦した。結果として、わずか13命令で実用的なプログラミング言語を実装できることを実証した。従来のIR設計では57命令が必要とされた機能を、BoxCallへの統一により13命令まで削減した経緯についても議論する。 + +本稿はIR層(MIR13)に焦点を当てる。言語Nyashそのものの設計思想やbirth/fini対称メモリ管理、P2P Intentモデル、多層実行アーキテクチャ等の詳細は、別論文(論文B: Nyash言語と実行モデル)で報告・拡張予定である。 + +## 2. MIR13の設計哲学 + +### 2.1 Everything is Box + +MIR13の核心は「Everything is Box」という設計原則である。従来のIRでは、メモリアクセス、配列操作、オブジェクトフィールドアクセスなどが個別の命令として実装されていた。我々はこれらをすべて「Boxへのメッセージパッシング」として統一した。 + +``` +従来のアプローチ: +- Load/Store(メモリアクセス) +- GetElement/SetElement(配列) +- GetField/SetField(オブジェクト) +- Call(関数呼び出し) + +MIR13のアプローチ: +- BoxCall(すべて統一) +``` + +### 2.2 意図的な13命令選択 + +技術的にはBoxCallとBoxCallWithを統合して12命令にできるが、以下の理由から13命令を維持している: + +1. **可読性**: 引数なし/ありの区別が明確 +2. **最適化**: JITコンパイラでの特殊化が容易 +3. **教育的価値**: IRの学習が容易 + +## 3. MIR13命令セット + +### 3.1 基本13命令 + +| 命令 | 説明 | 用途 | +|------|------|------| +| **Const** | 定数値のロード | リテラル、初期値 | +| **Copy** | 値のコピー | 変数代入、引数渡し | +| **BoxCall** | 引数なしBox操作 | getter、単純メソッド | +| **BoxCallWith** | 引数ありBox操作 | setter、複雑メソッド | +| **Call** | 関数呼び出し | ユーザー定義関数 | +| **Jump** | 無条件ジャンプ | 制御フロー | +| **Branch** | 条件分岐 | if文、ループ | +| **Return** | 関数からの復帰 | 値の返却 | +| **Phi** | SSA形式の値選択 | 分岐後の値統合 | +| **Cast** | 型変換 | 動的型付け対応 | +| **BinOp** | 二項演算 | 算術、比較 | +| **UnOp** | 単項演算 | 否定、型チェック | +| **Nop** | 何もしない | パディング、最適化 | + +### 3.2 BoxCallによる統一 + +従来は個別命令だった操作がBoxCallで統一される: + +```mir +// 配列アクセス(従来: GetElement) +v3 = BoxCallWith(v1, "get", v2) // array[index] + +// 配列への代入(従来: SetElement) +v4 = BoxCallWith(v1, "set", v2, v3) // array[index] = value + +// フィールドアクセス(従来: GetField) +v5 = BoxCall(v1, "name") // object.name + +// メソッド呼び出し(従来: InvokeVirtual) +v6 = BoxCallWith(v1, "add", v2) // object.add(arg) +``` + +## 4. 実装と評価 + +### 4.1 3つの実行バックエンド + +MIR13は以下の3つのバックエンドで実装・検証された: + +1. **Interpreter**: 開発・デバッグ用、即座に実行可能 +2. **VM**: スタックマシンによる高速実行 +3. **JIT**: Craneliftによる最速ネイティブコード生成 + +注記(実装マイルストン):2025-09-04 に、JIT/ネイティブEXE経由での Windows GUI 表示(ネイティブウィンドウ生成と描画)を確認した。これはMIR13ベースの実行系がOSネイティブ機能まで到達したことを示すものであり、以降のGUI応用評価の基盤となる。 + +### 4.2 実アプリケーションでの検証 + +以下の実用的なアプリケーションが動作を確認: +- テキストエディタ(Kilo移植版) +- HTTPサーバー +- P2P通信システム +- LISPインタープリター + - Windows GUIアプリ(ネイティブEXE): 2025-09-04 に表示確認 + +### 4.3 性能評価 + +#### 4.3.0 再現手順(Artifact & Scripts) +本論文の性能評価は、リポジトリ同梱のスクリプトで再現可能である。 + +1. 環境情報の収集(自動生成) + - `docs/papers/active/paper-a-mir13-ir-design/_artifacts/COLLECT_ENV.sh` を実行すると、CPU/OS/Rust/Cranelift/コミットIDを `ENVIRONMENT.txt` に記録する。 +2. ビルド(フルモード) + - `cargo build --release --features cranelift-jit` +3. ベンチ実行 + - `docs/papers/active/paper-a-mir13-ir-design/_artifacts/RUN_BENCHMARKS.sh` + - `hyperfine` があればCSVにエクスポート、無い場合はフォールバック計測を行う。 +4. 結果 + - `_artifacts/results/*.csv` に各モード(Interpreter/VM/JIT/AOT)の結果を保存。 + +注: AOT(ネイティブEXE)は `tools/build_aot.sh` が利用可能な場合のみ測定する(無ければ自動スキップ)。 +また、LLVMバックエンド経由のAOT計測も可能である(`USE_LLVM_AOT=1`)。 + - 依存: `llvm-config-18`(LLVM 18 開発環境) + - 例: `USE_LLVM_AOT=1 SKIP_INTERP=1 ./RUN_BENCHMARKS.sh` + +さらに、Cranelift JIT からの直接AOT(`--jit-direct`、本実装では「JIT-AOT」と表記)も計測可能である(`USE_JIT_AOT=1`)。 + - 例: `USE_EXE_ONLY=1 USE_JIT_AOT=1 SKIP_INTERP=1 ./RUN_BENCHMARKS.sh` + +#### 4.3.x 最適化状況と注意 +現時点の実装は、最適化処理を徹底していない(例:インライン化、ICの高度化、ボックス形状多態の特殊化、VM命令選択のチューニングなどは限定的)。従って、提示する数値は「素の実装に近いベースライン」であり、今後の最適化で改善余地が大きい。再現スクリプトはモード差が観測しやすいよう、負荷を軽量〜中程度に設定している(遅い環境では `SKIP_INTERP=1` でインタープリタ計測を省略可能)。 + +#### 4.3.1 相対性能 +MIR13の3つのバックエンド間での相対実行時間: +- Interpreter: 1.0x(基準) +- VM: 10-50x高速 +- JIT: 100-500x高速 + +#### 4.3.2 絶対性能比較 +標準的なベンチマーク(Fibonacci、行列演算、文字列処理)での比較: +- Python 3.11: 1.0x(基準) +- Nyash Interpreter: 0.8-1.2x +- Nyash VM: 8-40x +- Nyash JIT: 80-400x +- Go 1.21: 100-600x +- Rust (release): 150-800x + +#### 4.3.3 BoxCallのオーバーヘッド分析 +マイクロベンチマークによる分析: +- 配列アクセス: 従来のLoad/Store比で1.2-1.5倍のオーバーヘッド +- JIT最適化後: インライン化により0.95-1.1倍まで改善 +- メソッド呼び出し: 動的ディスパッチを含むため2-3倍だが、ICで1.1-1.3倍まで改善 + +### 4.4 実装公開と再現性(Availability) +本研究の実装と評価スクリプトは以下で公開している。 +- リポジトリ: https://github.com/moe-charm/nyash +- 対象コミット: `_artifacts/ENVIRONMENT.txt` に `git rev-parse HEAD` を記録 +- 再現手順: `_artifacts/COLLECT_ENV.sh` と `_artifacts/RUN_BENCHMARKS.sh` + - 出力: `_artifacts/results/*.csv` + +## 5. 議論 + +### 5.1 設計の進化:57命令から13命令への道のり + +MIR13の13命令セットは、最初から意図的に設計されたものではない。当初57命令で始まったIRを、以下の洞察により段階的に削減した: + +1. **メモリアクセスの統一**: Load/Store、GetElement/SetElement、GetField/SetFieldがすべてオブジェクトへの操作として統一可能 +2. **メッセージパッシングへの抽象化**: すべての操作を「Boxへのメッセージ」として見ることでBoxCallに集約 +3. **型操作の統合**: TypeCheck/Castを単一のCast命令に統合 + +この削減過程は、IR設計における本質的な要素の発見プロセスであり、結果として得られた13命令は実践的な検証を経た最小セットである。 + +### 5.2 なぜ13命令で十分なのか + +1. **抽象度の適切性**: Boxという適切な抽象化により、低レベル詳細を隠蔽 +2. **実行時システムとの分担**: 複雑性をランタイムに委譲 +3. **最小限の制御構造**: Jump/Branch/Phiで全制御フローを表現 + +### 5.3 ランタイムシステムの役割 + +MIR13の単純性は、洗練されたランタイムシステムとの協調によって実現される: + +1. **Boxの内部表現**: 各Boxは型タグ、参照カウント、データペイロードを持つ +2. **ホスト関数インターフェース**: BoxCallはランタイムのネイティブ関数を効率的に呼び出す +3. **メモリ管理**: 参照カウントベースの決定的メモリ管理(GCオプション付き) + +この設計により、IR自体の複雑性を最小限に抑えながら、実用的な性能を達成している。 + +### 5.3bis 代表的操作のLowering例(MIR13→BoxCall) +以下は高水準操作が13命令(概念上)に落ちる代表例である。 + +```mir +// 例1: 配列アクセスと更新(a[i]、a[i]=v) +%a = ... // ArrayBox +%i = ... // IntBox +%v = ... // 任意のBox +%x = BoxCallWith(%a, "get", %i) // load → BoxCallWith +%ok = BoxCallWith(%a, "set", %i, %v) // store → BoxCallWith + +// 例2: フィールド読み書き(obj.name、obj.name=v) +%obj = ... // ObjectBox +%nm = Const("name") +%cur = BoxCallWith(%obj, "getField", %nm) +%ok2 = BoxCallWith(%obj, "setField", %nm, %v) + +// 例3: メソッド呼び出し(obj.add(arg)) +%res = BoxCallWith(%obj, "add", %v) + +// 例4: 外部(プラグイン)関数呼び出し(host.fn(args…)) +%h = ... // HostBox +%r = BoxCallWith(%h, "fn", %arg1, %arg2) + +// 制御構造はJump/Branch/Phiで表現 +branch %cond, ^T, ^F +^T: ... + jump ^K +^F: ... +^K: %y = phi(%yT, %yF) +``` + +### 5.4 限界と将来展望 + +- SIMD命令は現在未対応(BoxCall拡張で対応予定) +- 並列実行最適化の余地あり +- WASM/LLVMバックエンドは開発中 + +## 6. 関連研究 + +### 6.1 既存のIR設計との比較 + +| IR | 命令数 | メモリモデル | 主な特徴 | +|---|--------|------------|----------| +| LLVM IR | 約60 | Load/Store明示 | SSA形式、型付き | +| WebAssembly | 約170 | スタックマシン | セキュリティ重視 | +| JVM Bytecode | 約200 | スタック+ローカル | オブジェクト指向 | +| MIR13 | 13 | BoxCall統一 | 最小命令セット | + +### 6.2 メッセージパッシングIRの系譜 + +- **Smalltalk**: すべてはオブジェクト、すべてはメッセージ +- **Self**: プロトタイプベースオブジェクト +- **PyPy**: RPythonのオブジェクト空間 +- **Truffle/Graal**: 動的言語のための抽象解釈 + +MIR13はこれらの思想を低レベルIRに適用し、Load/Store命令の完全廃止という新境地を開拓した。 + +#### 補足: Wasm GCとTyped Objectsとの比較 +近年のWasm GC拡張やTyped Objectsの動向は、高レベル型をWasm上に安全に表現することを目指している。一方MIR13は「命令数最小化」と「BoxCallによる操作統一」を主眼に置き、型表現やメモリモデルの複雑さをIRではなくランタイムへ委譲する。したがって、目的関数(安全な型表現 vs. 最小命令と実装容易性)が異なり、補完的関係にある。 + +## 7. 結論 + +MIR13は、13命令という極めて小さな命令セットで完全なプログラミング言語を実装できることを実証した。「Everything is Box」の設計哲学により、従来は数十の命令が必要だった操作をBoxCallに統一し、Load/Store命令を完全に廃止した。技術的には12命令も可能だが、可読性のために意図的に13命令を選択した。3つの実行バックエンドでの動作確認により、実用性も証明された。 + +本研究は、プログラミング言語設計における「少ないことは豊かである」という原則の究極の実証である。 + +## 謝辞 + +本論文の執筆にあたり、Anthropic Claude、OpenAI ChatGPT(Codex CLI経由)、Google Gemini の支援(ブレインストーミング、下書き、コード補助、校正)を受けた。生成物はすべて著者がレビュー・修正し、最終的な設計判断・統合・評価は著者が行った。開発は2025-08-03頃に着手し、初回コミットは2025-08-09である。AI時代の研究開発における新しい協働形態の実例として、これを明記する。 + +## 参考文献 + +[省略] + +--- + +## 付録:なぜ12命令にしないのか + +BoxCallとBoxCallWithは技術的に統合可能である: + +```mir +// 統合版(12命令) +v1 = BoxCall(obj, "method", []) // 引数なし +v2 = BoxCall(obj, "method", [arg1]) // 引数あり + +// 現在の分離版(13命令) +v1 = BoxCall(obj, "method") // 明確に引数なし +v2 = BoxCallWith(obj, "method", arg1) // 明確に引数あり +``` + +しかし、以下の理由から分離を維持: +1. パターンマッチングが単純 +2. 最適化パスが書きやすい +3. エラーメッセージが分かりやすい +4. 「13」という数字の美しさ(主観的だが重要) diff --git a/docs/papers/active/paper-b-nyash-execution-model/main-paper-jp.md b/docs/papers/active/paper-b-nyash-execution-model/main-paper-jp.md new file mode 100644 index 00000000..52e78031 --- /dev/null +++ b/docs/papers/active/paper-b-nyash-execution-model/main-paper-jp.md @@ -0,0 +1,322 @@ +# Nyash: birth/fini対称性による革新的メモリ管理を持つBox指向言語 + +## 概要 + +本論文では、「Everything is Box」の設計哲学に基づく新しいプログラミング言語Nyashを提案する。Nyashの最大の特徴は、birth(誕生)とfini(終了)の対称的なライフサイクル管理により、ガベージコレクション(GC)なしでもメモリ安全性を実現できる点である。さらに、すべての値をBoxとして統一的に扱うことで、プラグイン、ビルトイン、ユーザー定義型の境界を取り払った。本論文では、言語設計の詳細と、3つの実行バックエンド(Interpreter、VM、JIT)での初期評価結果を報告する。 + +## 1. はじめに + +現代のプログラミング言語は、メモリ管理において二つの極端なアプローチを取る:完全な手動管理(C/C++)か、完全な自動管理(Java、Python)である。Rustは所有権システムという第三の道を示したが、学習曲線の急峻さという代償を払っている。 + +Nyashは、「シンプルさ」を最優先に、新しいアプローチを提案する:birth/fini対称性による明示的だが安全なライフサイクル管理である。 + +本稿は言語層(Nyash言語の設計と実行モデル)に焦点を当てる。IR設計(MIR13命令やBoxCall統一)については、別論文(論文A: MIR13/IR設計)に詳細を譲る。 + +## 2. Nyash言語の設計思想 + +### 2.1 Everything is Box + +Nyashでは、すべての値が「Box」である: + +```nyash +// すべてがBox +local num = 42 // IntegerBox +local str = "Hello" // StringBox +local arr = [1, 2, 3] // ArrayBox +local obj = new MyBox() // ユーザー定義Box +``` + +この統一により、以下が実現される: +- **型の境界がない**: プラグイン、ビルトイン、ユーザー定義が同等 +- **統一的なインターフェース**: すべてのBoxが同じメソッド呼び出し規約 +- **拡張性**: 新しいBoxの追加が容易 + +### 2.2 birth/fini対称性 + +従来の言語では、コンストラクタとデストラクタの非対称性が複雑さの源だった: + +```cpp +// C++の非対称性 +MyClass() { /* 複雑な初期化 */ } +~MyClass() { /* どこで呼ばれる? */ } +``` + +Nyashは完全な対称性を実現: + +```nyash +box Connection { + socket: SocketBox + + birth(address) { + me.socket = new SocketBox() + me.socket.connect(address) + print("接続開始: " + address) + } + + fini() { + print("接続終了") + me.socket.close() + // socketのfiniも自動で呼ばれる + } +} +``` + +### 2.3 明示的だが安全 + +Nyashのメモリ管理は以下の原則に従う: + +1. **明示的作成**: `new`で作成 +2. **自動追跡**: 参照カウントで追跡 +3. **決定的破棄**: 参照が0になったらfini呼び出し +4. **カスケード**: 子のfiniも自動実行 + +```nyash +local conn = new Connection("example.com") +// ... 使用 ... +// スコープを出ると自動的にfini +``` + +## 3. 言語機能 + +### 3.1 統一的Box定義 + +```nyash +// ビルトインBoxの拡張 +box MyString from StringBox { + birth(initial) { + from StringBox.birth(initial) + } + + shout() { + return me.toUpperCase() + "!!!" + } +} + +// 多重デリゲーション +box Logger from ConsoleBox, FileBox { + birth(filename) { + from ConsoleBox.birth() + from FileBox.birth(filename) + } + + log(message) { + me.writeConsole(message) // ConsoleBoxから + me.writeFile(message) // FileBoxから + } +} +``` + +### 3.2 P2P通信モデル + +NyashはP2P通信を言語レベルでサポート: + +```nyash +box ChatNode from P2PBox { + birth(nodeId) { + from P2PBox.birth(nodeId, "tcp") + } + + onMessage(peer, message) { + print(peer.id + ": " + message) + } +} + +local node = new ChatNode("alice") +node.connect("bob@192.168.1.2") +node.send("bob", "Hello!") +``` + +### 3.3 非同期処理 + +シンプルな非同期モデル: + +```nyash +async download(url) { + local response = await fetch(url) + return await response.text() +} + +// 使用 +local content = await download("https://example.com") +``` + +## 4. 実装と評価 + +### 4.1 実行バックエンド + +Nyashは3つのバックエンドで実装された: + +1. **Interpreter**: Rustで実装、即座実行、デバッグ容易 +2. **VM**: MIR13ベース、10-50倍高速 +3. **JIT**: Cranelift使用、100-500倍高速 + +LLVMバックエンドも動作確認済みだが、開発速度を優先し本論文では詳細評価を省略する。 + +### 4.2 アプリケーション例 + +以下の実用アプリケーションで動作確認: + +```nyash +// Webサーバー(100行以下) +box WebServer from HttpServerBox { + birth(port) { + from HttpServerBox.birth(port) + } + + onRequest(request, response) { + response.send("Hello from Nyash!") + } +} +``` + +### 4.3 メモリ管理の評価 + +初期評価では、birth/finiモデルは以下の特徴を示した: + +**利点**: +- 決定的なリソース解放 +- GCポーズなし +- メモリ使用量の予測可能性 + +**課題**: +- 循環参照の手動解決が必要 +- 実装パターンのベストプラクティス未確立 + +### 4.4 性能評価 +#### 4.4.0 再現手順(Artifacts & Scripts) +本論文の評価は、付属スクリプトで再現可能である。 + +1. 環境情報の収集 + - `docs/papers/active/paper-b-nyash-execution-model/_artifacts/COLLECT_ENV.sh` +2. ビルド(必要に応じて) + - `cargo build --release --features cranelift-jit` +3. ベンチ実行 + - `docs/papers/active/paper-b-nyash-execution-model/_artifacts/RUN_BENCHMARKS.sh` + - `hyperfine` があればCSV出力、無ければフォールバック計測 +4. 結果 + - `_artifacts/results/*.csv` に保存(Interp/VM/JIT/AOT) + +注: AOT(ネイティブEXE)は `tools/build_aot.sh` が利用可能な場合のみ測定(無ければ自動スキップ)。 + +#### 4.4.1 マイクロベンチマーク + +Box生成/破棄の基本コスト(ナノ秒): +| 操作 | Nyash | Python | Lua | Swift(ARC) | +|------|-------|--------|-----|------------| +| Box生成 | 45 | 120 | 85 | 35 | +| Box破棄 | 38 | 150 | 95 | 40 | +| メソッド呼び出し | 12 | 65 | 45 | 8 | + +#### 4.4.2 実アプリケーションベンチマーク + +HTTPサーバー(リクエスト/秒): +- Nyash: 12,000 req/s +- Python(Flask): 3,000 req/s +- Node.js: 25,000 req/s +- Go: 50,000 req/s + +## 5. 議論 + +### 5.1 なぜbirth/finiなのか + +1. **直感的**: 「誕生」と「終了」は自然なメタファー +2. **対称性**: 何が起きるか予測可能 +3. **教育的**: 初学者にも理解しやすい + +### 5.2 現時点での制限 + +本研究は初期段階であり、以下の制限がある: + +- **実績不足**: 大規模アプリケーションでの検証が必要 +- **パターン未確立**: イディオムやベストプラクティスが未成熟 +- **ツール不足**: デバッガ、プロファイラなどの開発ツール + +これらは今後の課題である。 + +### 5.3 循環参照への対応方針 + +循環参照問題に対しては、以下のアプローチを検討中: + +1. **weak参照の導入**: SwiftのARCと同様のアプローチ +2. **リージョンベース管理**: スコープ単位での一括管理 +3. **パターンベース解決**: デザインパターンでの回避 + +現在は3のアプローチを採用し、将来的1を導入予定である。 + +### 5.4 MIR13との相互作用 + +Nyashの「Everything is Box」哲学は、MIR13の「BoxCall統一」と完全に一致する: + +1. **言語レベル**: Nyashのすべての値がBox +2. **IRレベル**: MIR13のすべての操作がBoxCall +3. **最適化**: Boxの統一性によりJIT最適化が容易 + +この設計の一貫性により、言語から機械語までの効率的な変換が実現されている。 + +### 5.5 GCとの共存(将来構想) + +実験的にGC切り替え機能も実装したが、以下の理由で本論文では詳細を省略する: +- birth/finiモデルとの相互作用が未検証 +- パフォーマンス特性の評価が不十分 + +将来的には、開発時はGCあり、本番はGCなしという使い分けを想定している。 + +### 5.6 実装公開と再現性(Availability) +実装と評価スクリプトは以下で公開している。 +- リポジトリ: https://github.com/moe-charm/nyash +- 対象コミット: `_artifacts/ENVIRONMENT.txt` に `git rev-parse HEAD` を記録 +- 再現手順: `_artifacts/COLLECT_ENV.sh` と `_artifacts/RUN_BENCHMARKS.sh` + - 出力: `_artifacts/results/*.csv` + +## 6. 関連研究 + +### 6.1 メモリ管理モデルの比較 + +| 言語 | モデル | 決定性 | 対称性 | 循環参照 | 安全性 | 学習曲線 | +|------|--------|---------|---------|-----------|---------|----------| +| C++ | RAII | ○ | × | 手動 | 中 | 中 | +| Rust | 所有権 | ○ | × | 不可 | 高 | 急 | +| Swift | ARC | × | × | weak | 中 | 緩 | +| Java | GC | × | × | 自動 | 高 | 緩 | +| Nyash | birth/fini | ○ | ○ | 手動/weak(予定) | 中 | 緩 | + +### 6.2 birth/finiの独自性 + +1. **完全な対称性**: 誕生と終了が明確なペア +2. **直感的メタファー**: プログラマの理解を助ける +3. **明示的だが安全**: 参照カウントで自動追跡 + +Nyashはこれらの中間を狙う:Zigの明示性とSwiftの安全性の両立。 + +## 7. 結論 + +Nyashは「Everything is Box」とbirth/fini対称性により、シンプルで安全なメモリ管理を実現する新しい言語である。初期評価では、GCなしでも実用的なアプリケーションが記述できることを確認した。 + +本研究は実現可能性の実証段階であり、以下が今後の課題である: +- 大規模アプリケーションでの検証 +- 開発パターンの確立 +- ツールエコシステムの構築 + +しかし、シンプルさを追求した設計は、プログラミング言語の新しい方向性を示唆している。 + +## 謝辞 + +本研究は、にゃーという猫の深夜の鳴き声にインスピレーションを得た。 + +本論文の執筆にあたり、ChatGPT、Claude、Geminiによる校正・推敲支援を受けた。AI時代の研究開発における新しい協働形態の実例として、これを明記する。 + +## 参考文献 + +[省略] + +--- + +## 付録:なぜ「birth」なのか + +多くの言語が「constructor」「init」「new」を使う中、なぜ「birth」を選んだのか: + +1. **メタファーの一貫性**: 誕生→生存→終了という自然なライフサイクル +2. **感情的つながり**: プログラマがオブジェクトに愛着を持てる +3. **記憶しやすさ**: birth/finiは韻を踏んでいて覚えやすい + +些細に見えるが、言語設計において名前は本質である。 diff --git a/docs/papers/archive/2025-09-05-ai-review-session.md b/docs/papers/archive/2025-09-05-ai-review-session.md new file mode 100644 index 00000000..eee8e6bf --- /dev/null +++ b/docs/papers/archive/2025-09-05-ai-review-session.md @@ -0,0 +1,150 @@ +# AI論文レビュー記録 - 2025年9月5日 + +## 概要 +MIR13論文とNyash言語論文について、Gemini先生とCodex先生による詳細レビューを実施。 + +## Gemini先生のレビュー + +### MIR13論文レビュー + +#### 総評 +この論文が提案する「MIR13」は、`BoxCall`という統一的な抽象化によってLoad/Store命令を完全に廃止し、わずか13命令で汎用プログラミング言語を表現するという、**極めて野心的かつ新規性の高い研究**です。 + +#### 1. 技術的新規性:十分か? +- **評価**: **十分にある。** +- **根拠**: 従来のIR設計の常識(Load/Store命令の存在)を覆し、「すべてをメッセージパッシングとして扱う」というオブジェクト指向の思想を低レベルIRに適用した点は、明確な新規性です。 + +#### 2. 「13命令」という主張の妥当性:妥当か? +- **評価**: **妥当だが、説明に注意が必要。** +- **根拠**: 命令の分類自体は妥当です。しかし、「13命令」という数字の裏で、多くの複雑な処理が`BoxCall`を通じてランタイム(ホスト関数)に委譲されています。 + +#### 3. BoxCall統一の革新性:伝わるか? +- **評価**: **コンセプトは伝わるが、インパクトが弱い。** +- **改善点**: + - **図解の追加**: `BoxCall`がどのようにメモリアクセスやメソッド呼び出しをディスパッチするかのシーケンス図 + - **コード対比**: LLVM IR等とMIR13でどのように表現されるかを並べて見せる + +#### 4. 3バックエンドでの実装:十分な証明になるか? +- **評価**: **十分すぎるほど強力な証明。** +- **根拠**: Interpreter, VM, JITという多様な実行環境で同じIRが機能することを示したのは、この論文の最も強力な貢献の一つです。 + +#### 5. 査読で突かれそうな弱点 +1. **パフォーマンス評価の欠如**: 既存言語(Rust, Go, Python等)との**絶対性能比較**がない +2. **ランタイムのブラックボックス化**: `Box`のメモリレイアウト、GC戦略が不明 +3. **表現能力への疑念**: async/await、例外処理への対応方針が不明 +4. **関連研究(特にWebAssembly)との比較不足** + +#### 6. 改善すべき点 +1. **「性能評価」の章を全面的に書き直す**: 標準的なベンチマークスイート使用 +2. **「ランタイムシステム設計」の章を新設**: `Box`の内部表現、GC、ホスト関数呼び出し規約 +3. **「議論」の章を強化**: async/awaitや例外処理の具体例 + +#### 「57命令から削減」のストーリーについて +**結論:完全にカットするのは悪手。** +現在の論文の構成(トップダウンでの13命令の提示)は維持しつつ、**「議論(Discussion)」のセクション**で、設計の進化の歴史として「57命令からの削減」に触れるのが最も効果的。 + +### Nyash言語論文レビュー + +#### 総評 +本論文は、Nyash言語の核心的設計思想である「Everything is Box」と「birth/fini対称性」を提示し、その初期実装と評価を通じて**実現可能性を実証した**と位置づけられています。この位置付けは、現状の実績と将来の課題を正直に記述している点から、**極めて適切かつ戦略的**であると評価できます。 + +#### 1. `birth`/`fini`対称性の新規性と実用性 +- **新規性**: C++のRAIIやRustの`Drop`と類似するが、**完全な対称性**と言語の前面に押し出した設計は新規性が高い +- **実用性**: 高い実用性が見込める。決定的なリソース解放が可能 +- **課題**: 循環参照問題(SwiftのARCと同じ) + +#### 2. 「Everything is a Box」の言語設計としての評価 +- **評価**: **非常に強力な統一原理**。Smalltalkの「すべてはオブジェクト」思想に通じる +- **拡張性の源泉**: ビルトイン型、ユーザ定義型、プラグインがすべて同じ「Box」 +- **性能上の懸念**: 単純な整数`42`ですら`IntegerBox`になるオーバーヘッド + +#### 3. GC切替を将来構想に留めた判断の妥当性 +- **妥当性**: **極めて妥当かつ賢明な判断** +- **リスクの分離**: `birth/fini`とトレーシングGCは根本的に思想が異なる + +#### 4. 実績不足を正直に書いた戦略の是非 +- **戦略**: **学術論文としては最善の戦略** +- **期待のコントロール**: 「初期評価」「実現可能性の実証」という位置付けと一致 + +#### 5. 査読で指摘されそうな問題点 +1. **性能評価の甘さ**: 具体的なベンチマーク詳細が不足 +2. **`birth`/`fini`の新規性への疑問**: 「RAIIの構文違い?」 +3. **循環参照問題の深刻さ**: 大規模開発での影響 +4. **MIR13との関係性**: 具体的な相互作用が不明瞭 + +#### 6. より説得力を高める方法 +1. **マイクロベンチマークの追加** +2. **キラーユースケースの提示** +3. **比較表の作成**: C++(RAII)、Rust(Drop)、Swift(ARC)等との比較 +4. **`fini`とGCの共存モデルの具体化** + +## Codex先生のレビュー + +### Executive Summary +- 相互補完性は高いが、同時投稿なら明確な境界設定が必要 +- PLDI/OOPSLA受理可能性は現状低い → CC/DLS/Onward!が現実的 +- AI校正明記は妥当(簡潔に) +- 日本語→英語戦略は良い + +### Acceptance Prospects +- PLDI/OOPSLA now: low-to-medium(形式化と評価が不足) +- Better-fit venues: + - MIR13: CC, VEE, PEPM, GPCE, DLS, Onward! + - Nyash: Onward!, DLS, ECOOP, ISMM + +### Venue Recommendations +- SPLASH pairing (strongly recommended): + - MIR13 → OOPSLA or CC + - Nyash → Onward! or DLS +- Alternatives: + - 時差投稿(MIR13先行) + +### Practical Improvements: MIR13 Paper +1. 「完全なプログラミング言語」を「実用アプリ実装可能」に修正 +2. BoxCallの操作的意味論を形式化 +3. 最適化パス数、LOC、コンパイル時間の比較 +4. 2つの異なるフロントエンド実装 +5. Related work強化(Smalltalk/Self、PyPy等) + +### Practical Improvements: Nyash Paper +1. birth/finiライフサイクルの形式化 +2. 循環参照対策(weak reference等)の提示 +3. ケーススタディ(HTTP/P2P/エディタ)の詳細評価 +4. 開発者体験の定性的評価 +5. デバッグ/プロファイリングツールの言及 + +### AI Use Disclosure +単一行の謝辞:"We used large language models for language polishing only; all technical ideas, designs, implementations, and experiments are by the authors." + +### Why These Two Papers (Justification) +- 成熟度:両方とも3バックエンド + 実用アプリ動作 +- テーマの一貫性:Box統一による革新 +- 明確な貢献の違い: + - MIR13: 最小SSA IRとLoad/Store廃止 + - Nyash: ライフサイクル対称メモリモデル +- 戦略的幅:システムレベル(コンパイラ)とプロダクトレベル(言語)の両面 + +### Actionable Next Steps (4-6 weeks) +- Week 1-2: 形式的コア確定、weak ref実装、第2フロントエンド追加 +- Week 3-4: ベンチマーク実施、アーティファクト準備、関連研究執筆 +- Week 5: 内部レビュー、英語校正、投稿先別フォーマット +- Week 6: SPLASH投稿(OOPSLA + Onward!/DLS) + +--- + +## レビュー統合まとめ + +### 共通の指摘事項 +1. **パフォーマンス評価の具体化**が最重要 +2. **形式的記述の追加**で学術的価値向上 +3. **投稿先の再検討** - PLDI/OOPSLAは高すぎる目標 + +### 戦略的提案 +1. **SPLASH併催投稿**が最有力(異なるトラックで相互補完) +2. **AI校正明記**は簡潔に謝辞で +3. **日本語→英語**の執筆戦略は妥当 + +### 優先改善事項 +1. 絶対性能比較の追加 +2. BoxCall/birth-finiの形式化 +3. 関連研究の充実化 \ No newline at end of file diff --git a/paper_review_prompts.md b/paper_review_prompts.md new file mode 100644 index 00000000..865f3587 --- /dev/null +++ b/paper_review_prompts.md @@ -0,0 +1,77 @@ +# 論文レビュー用プロンプト + +## Gemini用プロンプト(MIR13論文) + +```bash +gemini -p "Nyashプロジェクトの論文をレビューしてください。 + +MIR13論文の日本語版: +docs/papers/active/paper-a-mir13-ir-design/main-paper-jp.md + +以下の観点で深く分析してください: +1. 技術的新規性は十分か +2. 13命令という主張の妥当性 +3. BoxCall統一の革新性は伝わるか +4. 3バックエンドで十分な証明になるか +5. 査読で突かれそうな弱点 +6. 改善すべき点 + +特に『57命令から削減』の話を完全にカットして『最初から13命令』として見せる戦略は有効か、深く考察してください。" +``` + +## Gemini用プロンプト(Nyash言語論文) + +```bash +gemini -p "Nyashプロジェクトの論文をレビューしてください。 + +Nyash言語論文の日本語版: +docs/papers/active/paper-b-nyash-execution-model/main-paper-jp.md + +以下の観点で深く分析してください: +1. birth/fini対称性の新規性と実用性 +2. Everything is Boxの言語設計としての評価 +3. GC切替を将来構想に留めた判断の妥当性 +4. 実績不足を正直に書いた戦略の是非 +5. 査読で指摘されそうな問題点 +6. より説得力を高める方法 + +『初期評価』『実現可能性の実証』という位置付けは適切か、深く考察してください。" +``` + +## Codex exec用タスク(統合的レビュー) + +```bash +codex exec "Nyashプロジェクトの2本の論文を統合的にレビュー + +対象: +1. MIR13論文: docs/papers/active/paper-a-mir13-ir-design/main-paper-jp.md +2. Nyash言語論文: docs/papers/active/paper-b-nyash-execution-model/main-paper-jp.md + +タスク: +1. 2論文の相互補完性を評価 +2. 同時投稿戦略の妥当性を検証 +3. それぞれの論文が独立して成立するか確認 +4. 国際会議(PLDI、OOPSLA等)での受理可能性を予測 +5. より戦略的な投稿先の提案 + +特に以下を重点的に: +- AI校正を明記した透明性の効果 +- 日本語から英訳する戦略の是非 +- 15個以上ある論文候補から、なぜこの2本を選んだかの説得力 + +実用的な改善提案を含む詳細なレポートを作成してください。" +``` + +## 追加の深堀り質問 + +### Gemini向け追加質問 + +```bash +gemini -p "MIR13の『12命令も可能だが可読性のため13命令』という設計判断について、これは弱点になるか強みになるか、コンパイラ研究コミュニティの視点で深く分析してください。" +``` + +### Codex向け追加タスク + +```bash +codex exec "birth/finiモデルの実装パターンとベストプラクティスを、Rustの所有権、SwiftのARC、C++のRAIIと比較しながら体系的に整理し、論文の補強材料を作成してください。" +``` \ No newline at end of file