Remove legacy hardcoded 'sum' carrier validation that was blocking array_filter patterns with different accumulator names (e.g., 'out'). Before: Pattern3 required carrier named 'sum' to exist After: Pattern3 uses carrier_info generically (any carrier name works) Test results: - phase49_joinir_array_filter_smoke: PASS ✅ - phase49_joinir_array_filter_fallback: PASS ✅ - phase49_joinir_array_filter_ab_comparison: PASS ✅ - Full suite: 909/909 PASS, 0 FAIL Also: Archive old roadmap documentation (67k lines moved to docs/archive/) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
115 lines
5.1 KiB
Plaintext
115 lines
5.1 KiB
Plaintext
# Phase 10.7 – Python Native 再スタート計画(合意版 / txt)
|
||
|
||
目的: 現行の Plugin-First(PyRuntimeBox/PyObjectBox, Handle-First/TLV)を維持しつつ、トランスパイル路線(Python→Nyash)を“All or Nothing”原則で段階導入。10.6の足場(Thread-Safety/Scheduler)上で、AOT配布体験に直結する最短ラインを構築する。
|
||
|
||
====================
|
||
A) 方針(判断)+ Property System革命統合(2025-09-18追加)
|
||
====================
|
||
- 二本立てを明確化:
|
||
1) 実行系(現行): PyRuntimeBox 経由(VM=仕様、JIT=AOT生成のみ)。配布/運用の実用ライン。
|
||
2) トランスパイル系(10.7): Python→Nyash→MIR→AOT。コンパイル成功/失敗の二択(フォールバック自動無し)。
|
||
- 役割分担:未対応Pythonはユーザーが明示的に PyRuntimeBox を使う。トランスパイルはコンパイル成功率を段階的に拡大。
|
||
- Plugin-Firstは維持(Parser/CompilerもプラグインBox化)。CLI/VMから統一呼び出し。
|
||
|
||
====================
|
||
B) 最小成功像(Phase 1 / DoD)
|
||
====================
|
||
- サンプルpy(Phase 1 範囲内)を `pythonc`(仮)で Nyashスクリプトへ生成 → `--compile-native` で EXE 生成 → 実行。
|
||
- 機能カバレッジ(Phase 1): def/if/for/while/return/bool/算術/比較/関数呼び出し/LEGB/デフォルト引数/for-else。
|
||
- Differential(限定): Phase 1 サンプル群で CPython と一致(出力/戻り/例外の有無)。
|
||
|
||
====================
|
||
C) サブフェーズとタスク
|
||
====================
|
||
C1) Parser Plugin(1週)
|
||
- `plugins/nyash-python-parser-plugin`: Python→AST(pyo3)。
|
||
- AST→CorePy IR(JSON): 構文の正規化(with→try/finally などはPhase 2)。
|
||
- Telemetry: ノード統計/未対応ノードを列挙。
|
||
|
||
C2) Compiler Core(2週)
|
||
- IR→Nyash AST 生成(Box化/クロージャ/LEGB/デフォ引数の再現)。
|
||
- peephole最小(定数畳み込み)。
|
||
- 生成NyashのPretty-print + 簡易ソースマップ。
|
||
|
||
C3) 配線/CLI/実行(3日)
|
||
- `nyash --pyc file.py -o out.ny`(Nyash出力)/ `--pyc-native file.py -o app`(EXE直行)を追加(内部で既存 `--compile-native` を利用)。
|
||
- 生成Nyashは既存コンパイラ経由で MIR→AOT を通す(Strict)。
|
||
|
||
C4) テスト/観測(1週並行)
|
||
- `phase-10.7/testing-plan.md` の Phase 1 部分を小粒に実装。
|
||
- VM vs AOT の「Result:」比較ラインを流用(既存スモークベース)。
|
||
|
||
====================
|
||
D) インターフェース / 成果物
|
||
====================
|
||
- ParserBox: `parse(code: String) -> AstBox/CorePyBox`(内部JSON保持 or to_json)
|
||
- CompilerBox: `compile(ir: CorePyBox) -> Result<NyashSourceBox, ErrorBox>`
|
||
- CLI: `--pyc/--pyc-native`(初期は隠しフラグでも可)
|
||
- Docs: README/implementation/testing-plan を PLAN に沿って更新。
|
||
|
||
====================
|
||
E) リスク/緩和
|
||
====================
|
||
- 範囲膨張: Phase 1 の構文/意味論を固定し、Beyondは即Err。PyRuntimeBoxは明示利用。
|
||
- 例外/with/comp/async: Phase 2/3の対象。IR設計時に将来ノードを予約(後方互換)。
|
||
- Windows配布: 10.5で整えた PATH/PYTHONHOME 補助はPyRuntime向け。トランスパイル後はCPython依存なし。
|
||
|
||
====================
|
||
F) タイムライン(目安)
|
||
====================
|
||
- C1: 1週 / C2: 2週 / C3: 3日 / C4: 1週(並行)。
|
||
|
||
====================
|
||
G) 現行との接続
|
||
====================
|
||
- 10.6の足場(Thread-Safety/Scheduler)は維持。トランスパイル系は単一スレッド/VM基準で十分。
|
||
- 10.5のAOT導線/nyrtシムはそのまま活用(生成Nyashに対して適用)。
|
||
|
||
====================
|
||
H) Property System革命統合(2025-09-18 ブレイクスルー)
|
||
====================
|
||
|
||
### 🌟 Python → Nyash Property マッピング革命
|
||
|
||
今日完成したProperty System(stored/computed/once/birth_once)により、Python transpilationが飛躍的に向上:
|
||
|
||
**Pythonプロパティの完全対応**:
|
||
```python
|
||
# Python側
|
||
class PyClass:
|
||
def __init__(self):
|
||
self._value = 42
|
||
|
||
@property
|
||
def computed_prop(self):
|
||
return self._value * 2
|
||
|
||
@functools.cached_property
|
||
def expensive_prop(self):
|
||
return heavy_computation()
|
||
```
|
||
|
||
**自動生成Nyash(革命的シンプル)**:
|
||
```nyash
|
||
box PyClass {
|
||
_value: IntegerBox // stored: 通常フィールド
|
||
computed_prop: IntegerBox { me._value * 2 } // computed: @property
|
||
once expensive_prop: ResultBox { heavy_computation() } // once: @cached_property
|
||
|
||
birth() { me._value = 42 }
|
||
}
|
||
```
|
||
|
||
### 🎯 実装戦略更新
|
||
- **C2フェーズ拡張**: PythonCompilerBoxにProperty System生成機能追加
|
||
- **descriptor protocol**: Python property/method → Nyash property 4分類自動判定
|
||
- **poison-on-throw**: cached_property例外時の安全性保証
|
||
|
||
### 📊 成功指標追加
|
||
```
|
||
Property coverage: @property(100%), @cached_property(100%), descriptors(80%)
|
||
Performance boost: cached property 10-50x faster (LLVM最適化)
|
||
Code generation: Python class → 50%短いNyashコード
|
||
```
|
||
|