Phase 10.7 (NYASH_JIT_PHI_MIN=1): Minimal PHI support for single-diamond via block params; extend IRBuilder with block-param/jump-args APIs; implement in CraneliftBuilder; update LowerCore two-pass for PHI wiring.

This commit is contained in:
Moe Charm
2025-08-27 17:52:37 +09:00
parent 6bfb38949c
commit 633a073a30
13 changed files with 706 additions and 45 deletions

View File

@ -0,0 +1,27 @@
# Phase 10.1a - 計画と設計
## 🎯 このフェーズの目的
PythonParserBoxの全体計画を理解し、実装の方向性を把握する。
## 📁 含まれるファイル
- **`pythonparser_integrated_plan_summary.txt`** - 統合実装計画(最重要)
- **`expert_feedback_gemini_codex.txt`** - Gemini先生とCodex先生の技術評価
- **`archive/`** - 初期検討資料
## ✅ 完了条件
- [ ] 統合計画を読んで理解
- [ ] エキスパートフィードバックを確認
- [ ] 5つの核心戦略を把握
- 関数単位フォールバック
- Python 3.11固定
- 意味論の正確な実装優先
- GIL管理の最小化
- テレメトリー重視
## 📝 重要ポイント
- **Differential Testing戦略** - 世界中のPythonコードがテストケースに
- **段階的実装** - 完璧を求めず動くものから
- **成功の測定基準** - カバレッジ率70%以上、性能向上2-10倍
## ⏭️ 次のフェーズ
→ Phase 10.1b (環境設定)

View File

@ -0,0 +1,55 @@
# Phase 10.1b - 環境設定とセットアップ
## 🎯 このフェーズの目的
PythonParserBox実装に必要な開発環境を整える。
## 📋 セットアップ手順
### 1. Python 3.11環境の固定
```bash
# pyenvを使用する場合
pyenv install 3.11.9
pyenv local 3.11.9
# または直接指定
python3.11 --version # 3.11.9であることを確認
```
### 2. Cargo.tomlへの依存関係追加
```toml
[dependencies]
pyo3 = { version = "0.22", features = ["auto-initialize"] }
pyo3-numpy = "0.22" # NumPy連携用Phase 3で使用
serde_json = "1.0" # JSON中間表現用
```
### 3. 環境変数の設定
```bash
# テレメトリー用
export NYASH_PYTHONPARSER_TELEMETRY=1 # 基本統計
export NYASH_PYTHONPARSER_TELEMETRY=2 # 詳細ログ
export NYASH_PYTHONPARSER_STRICT=1 # フォールバック時にパニックCI用
```
### 4. ディレクトリ構造の準備
```
src/boxes/python_parser_box/
├── mod.rs # メインモジュール
├── py_helper.rs # Python側ヘルパー
├── converter.rs # AST変換器
└── telemetry.rs # テレメトリー実装
```
## ✅ 完了条件
- [ ] Python 3.11.9がインストールされている
- [ ] Cargo.tomlに依存関係が追加されている
- [ ] 開発ディレクトリ構造が準備されている
- [ ] 環境変数の設定方法を理解している
## 🚨 注意事項
- **Python 3.11固定必須** - AST安定性のため
- **pyo3::prepare_freethreaded_python()** を一度だけ呼ぶ
- GIL管理に注意Phase 10.1cで詳細)
## ⏭️ 次のフェーズ
→ Phase 10.1c (パーサー統合実装)

View File

@ -0,0 +1,61 @@
# Phase 10.1c - パーサー統合実装
## 🎯 このフェーズの目的
pyo3を使ってCPythonパーサーをNyashに統合し、Python AST → JSON → Nyash ASTの変換パイプラインを構築する。
## 📁 実装ドキュメント
- **`python_parser_box_implementation_plan.txt`** - 技術的実装計画
- **`builtin_box_implementation_flow.txt`** - ビルトインBox実装フロー
## 🔧 実装タスク
### 1. PythonParserBoxの基本構造
```rust
pub struct PythonParserBox {
base: BoxBase,
py_helper: Arc<Mutex<PyHelper>>,
}
```
### 2. GIL管理の実装
```rust
// ✅ 良い例GILを最小限に
let json_ast = Python::with_gil(|py| {
py_helper.parse_to_json(py, code)
})?;
// GIL外でRust処理
let nyash_ast = py.allow_threads(|| {
convert_json_to_nyash(json_ast)
});
```
### 3. Python側ヘルパー実装
- `ast.parse()` → JSON変換
- 位置情報の保持lineno, col_offset
- Python 3.11固定チェック
### 4. 関数単位フォールバック判定
```rust
pub fn can_compile(&self, func_def: &PythonAst) -> CompileResult {
// サポートされているノードかチェック
// CompileResult::Compile or CompileResult::Fallback
}
```
## ✅ 完了条件
- [ ] PythonParserBoxがビルトインBoxとして登録されている
- [ ] `parse_to_json()` メソッドが動作する
- [ ] GIL管理が適切に実装されている
- [ ] テレメトリー基盤が組み込まれている
- [ ] 簡単なPythonコードでJSON ASTが取得できる
## 🧪 動作確認
```nyash
local py = new PythonParserBox()
local json_ast = py.parse_to_json("def hello(): return 'Hello'")
print(json_ast) // JSON ASTが表示される
```
## ⏭️ 次のフェーズ
→ Phase 10.1d (Core実装)

View File

@ -0,0 +1,72 @@
# Phase 10.1d - Core実装Phase 1機能
## 🎯 このフェーズの目的
Python AST → Nyash AST変換のPhase 1機能基本構文を実装する。
## 📁 実装ドキュメント
- **`python_implementation_roadmap.txt`** - Phase別実装ロードマップ
## 🔧 Phase 1必須要素Codex先生強調
### 意味論の必須実装
1. **LEGB + locals/freevars** - スコーピング規則
2. **デフォルト引数の評価タイミング** - 定義時に一度だけ
3. **イテレータベースのfor文** - `__iter__`/`__next__`プロトコル
4. **for/else + while/else** - Python独特のelse節
5. **Python真偽値判定** - `__bool__``__len__`
6. **短絡評価** - and/orの正確な挙動
### サポートする文Statement
- [x] def - 関数定義
- [x] if/elif/else - 条件分岐
- [x] for - ループelse節対応必須
- [x] while - ループelse節対応必須
- [x] break/continue - ループ制御
- [x] return - 戻り値
### サポートする式Expression
- [x] 算術演算子(+,-,*,/,//,%
- [x] 比較演算子(==,!=,<,>,<=,>=,is,is not
- [x] 論理演算子and,or,not- 短絡評価
- [x] 関数呼び出し
- [x] 変数参照/代入
- [x] リテラル(数値/文字列/bool
## 🧪 テストケース
```python
# Phase 1で動作すべきコード
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
# for/else のテスト
for i in range(10):
if i == 5:
break
else:
print("No break") # 実行されない
# デフォルト引数の罠
def append_to_list(item, lst=[]): # 定義時に評価!
lst.append(item)
return lst
```
## ✅ 完了条件
- [ ] 基本的な関数定義が変換できる
- [ ] 制御フローが正しく変換される
- [ ] 演算子が正しくマッピングされる
- [ ] Python意味論が保たれている
- [ ] 70%以上の関数がコンパイル可能
## 📊 テレメトリー確認
```bash
[PythonParser] Module: test.py (Python 3.11)
Functions: 10 total
Compiled: 7 (70%) ← 目標達成!
Fallback: 3 (30%)
```
## ⏭️ 次のフェーズ
→ Phase 10.1e (トランスパイラー)

View File

@ -0,0 +1,70 @@
# Phase 10.1e - Python → Nyashトランスパイラー
## 🎯 このフェーズの目的
Python ASTをNyashソースコードとして出力する機能を実装する。
## 📁 実装ドキュメント
- **`python_to_nyash_transpiler.txt`** - トランスパイラー設計
## 🔧 実装機能
### 1. AST → Nyashソース生成
```rust
impl PythonParserBox {
pub fn to_nyash_source(&self, python_code: &str) -> Result<String, String> {
// Python → JSON AST → Nyash AST → Nyashソース
}
}
```
### 2. 変換例
```python
# Python入力
def add(x, y):
return x + y
result = add(10, 5)
```
```nyash
# Nyash出力
function add(x, y) {
return x + y
}
local result
result = add(10, 5)
```
### 3. 出力フォーマッター
- インデント管理
- 括弧の追加Nyashは明示的
- コメント保持(可能な範囲で)
## 🛠️ コマンドラインツール
```bash
# 基本変換
nyash-transpile input.py -o output.nyash
# 変換統計付き
nyash-transpile --stats complex.py
# Output: Converted 15/17 functions (88%)
# 部分変換(サポート関数のみ)
nyash-transpile --partial script.py
```
## ✅ 完了条件
- [ ] `to_nyash_source()` メソッドが動作する
- [ ] 基本的なPythonコードが正しいNyashに変換される
- [ ] インデントが正しく管理される
- [ ] 変換統計が表示される
- [ ] ファイル出力ができる
## 🌟 期待される利用シーン
1. **学習ツール** - PythonユーザーがNyash構文を学ぶ
2. **段階的移行** - 既存Pythonコードの移行
3. **性能最適化** - ホットパスをNyashネイティブに
## ⏭️ 次のフェーズ
→ Phase 10.1f (テストとベンチマーク)

View File

@ -0,0 +1,92 @@
# Phase 10.1f - テストとベンチマーク
## 🎯 このフェーズの目的
Differential Testingでバグを発見し、性能向上を検証する。
## 🧪 Differential Testing戦略
### 1. テストフレームワーク
```rust
pub fn differential_test(code: &str) -> TestResult {
// CPythonで実行オラクル
let python_result = capture_python_execution(code)?;
// Nyashで実行
let nyash_result = execute_with_pythonparser(code)?;
// 結果比較
compare_results(python_result, nyash_result)
}
```
### 2. 比較項目
- **標準出力** - print文の結果
- **戻り値** - 関数の返す値
- **例外** - エラーメッセージ(正規化後)
- **副作用** - グローバル変数の変更等
### 3. テストコーパス
```
test_corpus/
├── basic/ # 基本構文テスト
├── stdlib/ # 標準ライブラリから抜粋
├── pypi_top100/ # 人気ライブラリから抜粋
└── edge_cases/ # エッジケース集
```
## 📊 ベンチマーク
### 1. 性能測定対象
```python
# 数値計算ベンチマーク
def mandelbrot(max_iter=100):
# フラクタル計算
pass
# ループベンチマーク
def sum_of_primes(n):
# 素数の和
pass
# 再帰ベンチマーク
def ackermann(m, n):
# アッカーマン関数
pass
```
### 2. 測定項目
- **実行時間** - CPython vs Nyash
- **メモリ使用量** - 最大/平均
- **コンパイル時間** - AST変換時間
- **フォールバック率** - 関数別統計
## 🐛 バグ発見と報告
### 発見されたバグの例
```
[BUG-001] for/else semantics mismatch
Python: else executed when no break
Nyash: else never executed
Fixed in: commit abc123
[BUG-002] Division operator difference
Python: 5/2 = 2.5 (float)
Nyash: 5/2 = 2 (integer)
Fixed in: commit def456
```
## ✅ 完了条件
- [ ] Differential Testingフレームワークが動作する
- [ ] 基本的なテストコーパスが準備されている
- [ ] 10個以上のバグを発見・修正
- [ ] ベンチマークで2倍以上の高速化を確認
- [ ] CI/CDパイプラインに統合されている
## 📈 成功の測定
- **カバレッジ率**: 70%以上の関数がコンパイル
- **性能向上**: 純Pythonループで2-10倍
- **バグ発見数**: Phase毎に10件以上
- **テスト成功率**: 95%以上
## ⏭️ 次のフェーズ
→ Phase 10.1g (ドキュメント作成)

View File

@ -0,0 +1,100 @@
# Phase 10.1g - ドキュメントとリリース準備
## 🎯 このフェーズの目的
PythonParserBoxの使い方を文書化し、コミュニティに公開する準備をする。
## 📚 作成するドキュメント
### 1. ユーザーガイド
- **Getting Started** - 最初の一歩
- **Python互換性ガイド** - サポートされる構文
- **トランスパイラー使用法** - Python→Nyash変換
- **トラブルシューティング** - よくある問題と解決法
### 2. API リファレンス
```nyash
// PythonParserBox API
box PythonParserBox {
// Python code → JSON AST
parse_to_json(code: String) -> String
// JSON AST → Nyash AST
json_to_nyash_ast(json: String) -> AstBox
// Python code → Nyash source
to_nyash_source(code: String) -> String
// 直接実行(関数単位フォールバック)
run(code: String) -> Box
// 変換統計
get_conversion_stats() -> MapBox
}
```
### 3. 移行ガイド
- **段階的移行戦略** - Pythonプロジェクトの移行手順
- **パフォーマンスチューニング** - ホットパスの最適化
- **ベストプラクティス** - 推奨される使い方
### 4. 内部設計ドキュメント
- **アーキテクチャ** - 全体設計
- **関数単位フォールバック** - 実装詳細
- **GIL管理** - pyo3との統合
- **テレメトリー** - 統計収集の仕組み
## 🎬 デモとチュートリアル
### 1. 動画チュートリアル
- 5分で分かるPythonParserBox
- Python→Nyash移行実演
- パフォーマンス比較デモ
### 2. サンプルプロジェクト
```
examples/
├── hello_python/ # 最小限の例
├── data_analysis/ # データ分析の移行例
├── web_api/ # WebAPIの移行例
└── benchmarks/ # ベンチマーク比較
```
## 📣 リリース準備
### 1. リリースノート作成
```markdown
# PythonParserBox v1.0 リリース!
## 🎉 新機能
- Python AST → Nyash AST変換
- 関数単位フォールバック
- Python→Nyashトランスパイラー
- Differential Testing
## 📊 パフォーマンス
- 純Pythonループ: 2-10倍高速化
- 数値計算: 5倍以上の改善
- メモリ効率: 30%削減
## 🐛 発見されたバグ
- Nyashパーサー: 15件修正
- セマンティクス: 8件修正
```
### 2. ブログ記事
- 「なぜPythonParserBoxを作ったのか」
- 「Differential Testingの威力」
- 「Everything is Boxの新たな展開」
## ✅ 完了条件
- [ ] ユーザーガイドが完成している
- [ ] APIリファレンスが完成している
- [ ] サンプルプロジェクトが動作する
- [ ] リリースノートが準備されている
- [ ] CI/CDでの自動テストが通る
## 🎯 Phase 10.1の完了!
これでPythonParserBoxの最初のリリースが完成
## ⏭️ 次の展開
→ Phase 10.2 (Phase 2機能の実装) または Phase 10.x (他言語対応)

View File

@ -1,52 +1,79 @@
# Phase 10.1 - PythonParserBox実装計画
# Phase 10.1 - PythonParserBox実装
このフォルダには、NyashとPythonの相互運用を実現するPythonParserBoxの実装計画が含まれています
見ただけで実装手順が分かる!順番通りに進めてください
## 📁 フォルダ構造
## 📂 サブフェーズ構成(順番に実行)
### メイン実装ドキュメント(最新版)
- **`pythonparser_integrated_plan_summary.txt`** - 統合実装計画サマリー(最重要)
- **`python_implementation_roadmap.txt`** - 実装ロードマップ(エキスパート統合版)
- **`python_parser_box_implementation_plan.txt`** - 技術的実装計画(統合版)
- **`builtin_box_implementation_flow.txt`** - ビルトインBox実装フロー統合版
- **`python_to_nyash_transpiler.txt`** - Python→Nyashトランスパイラー機能
### 📋 Phase 10.1a - 計画と設計
最初にここから!全体像を理解する。
- 統合実装計画を読む
- エキスパート評価を確認
- 5つの核心戦略を把握
### エキスパート評価
- **`expert_feedback_gemini_codex.txt`** - Gemini先生とCodex先生のフィードバック全文
### ⚙️ Phase 10.1b - 環境設定
開発環境を整える。
- Python 3.11.9をインストール
- Cargo.tomlに依存関係追加
- ディレクトリ構造準備
### アーカイブ(参考資料)
- **`archive/`** フォルダ
- `python_parser_box_design.txt` - 初期設計案
- `chatgpt5_original_idea.txt` - ChatGPT5の元アイデア
- `summary_2025_08_27.txt` - 当日の議論まとめ
### 🔧 Phase 10.1c - パーサー統合
CPythonパーサーをNyashに統合。
- PythonParserBox実装
- GIL管理の実装
- JSON中間表現への変換
## 🎯 Phase 10.1の目標
### 💻 Phase 10.1d - Core実装
基本的なPython構文の変換。
- Phase 1機能def/if/for/while
- 意味論の正確な実装
- 70%コンパイル率達成
1. **Pythonエコシステムの即座活用** - 既存Pythonライブラリの利用
2. **Differential Testing** - Nyashパーサーのバグ自動検証
3. **言語成熟度の向上** - 実用的なPythonコードでのストレステスト
### 🔄 Phase 10.1e - トランスパイラー
Python→Nyashソース変換。
- AST→Nyashソース生成
- フォーマッター実装
- コマンドラインツール
## 🔑 核心戦略(エキスパート推奨)
### 🧪 Phase 10.1f - テスト
Differential Testingでバグ発見。
- CPython vs Nyash比較
- ベンチマーク実行
- バグ修正とCI統合
1. **関数単位フォールバック** - ファイル全体でなく関数レベルで切り替え
2. **Python 3.11固定** - AST安定性の確保
3. **意味論の正確な実装** - 最適化より互換性優先
4. **GIL管理の最小化** - Python側でJSON生成、Rust側で処理
5. **テレメトリー重視** - 継続的な改善のための計測
### 📚 Phase 10.1g - ドキュメント
使い方を文書化してリリース。
- ユーザーガイド作成
- APIリファレンス
- サンプルプロジェクト
## 📋 実装フェーズ
## 🎯 各フェーズの目安時間
- **Phase 1**: Core Subset基本構文- 2週間
- **Phase 2**: Data Model特殊メソッド- 3週間
- **Phase 3**: Advanced Features高度な機能- 1ヶ月
- **Phase 4**: Modern Python最新機能- 将来
| フェーズ | 内容 | 目安時間 |
|---------|------|----------|
| 10.1a | 計画理解 | 2-3時間 |
| 10.1b | 環境設定 | 1-2時間 |
| 10.1c | パーサー統合 | 3-5日 |
| 10.1d | Core実装 | 1-2週間 |
| 10.1e | トランスパイラー | 3-5日 |
| 10.1f | テスト | 1週間 |
| 10.1g | ドキュメント | 3-5日 |
## 🚀 期待される成果
**合計**: 約1ヶ月
- 純Pythonループの2-10倍高速化
- Nyashパーサーのバグ発見と改善
- PythonからNyashへの段階的移行パス
- Python→Nyashスクリプト変換機能
## 🌟 最終目標
- **70%以上**の関数がコンパイル可能
- **2-10倍**の性能向上
- **10件以上**のNyashバグ発見
- **実用的な**Python→Nyash移行ツール
## 💡 Tips
- 各フェーズのREADME.mdを必ず読む
- 完了条件をチェックしながら進める
- テレメトリーで進捗を確認
- 困ったらarchive/の資料も参照
---
作成日: 2025-08-27
**さあ、Phase 10.1a から始めましょう!**