79 lines
2.4 KiB
Markdown
79 lines
2.4 KiB
Markdown
# 事件分析:Python統合における型システム特殊化の危機
|
||
|
||
## 1. 背景
|
||
- 開発開始から1ヶ月でインタープリター→VM→JIT→AOT/ネイティブまで到達
|
||
- 最終段階でPython統合(PyRuntimeBox)を実装中
|
||
- eval方式では完全にAOT対応(unsupported=0)達成
|
||
- import/getattr/callの実装で問題発生
|
||
|
||
## 2. ChatGPT5の提案(技術的には正しい)
|
||
```
|
||
Lowerer強化(Step 2):
|
||
PyRuntimeBox.import/getattr → PyObjectBox
|
||
PyObjectBox.call を emit_plugin_invoke で実装
|
||
```
|
||
|
||
### 提案の内容
|
||
- Lowererで型推論を実装
|
||
- `py.import("math")` → PyObjectBox型として記録
|
||
- `math.getattr("sqrt")` → 型情報を伝搬
|
||
- `sqrt.call(16)` → 適切なplugin_invokeを生成
|
||
|
||
## 3. 潜在的な危険性
|
||
|
||
### 3.1 設計哲学の崩壊
|
||
```
|
||
Nyash: Everything is Box
|
||
↓
|
||
Python専用の型システム導入
|
||
↓
|
||
Everything is... Special Case???
|
||
```
|
||
|
||
### 3.2 実装の肥大化
|
||
```rust
|
||
// もし実装していたら...
|
||
match (receiver_type, method) {
|
||
("PyRuntimeBox", "import") => "PyObjectBox",
|
||
("FileBox", "open") => "FileHandle",
|
||
("DBBox", "query") => "ResultSet",
|
||
("GameBox", "spawn") => "GameObject",
|
||
// 無限に増える特殊ケース
|
||
}
|
||
```
|
||
|
||
### 3.3 保守性の悪夢
|
||
- 新しいプラグインごとにコンパイラ改修
|
||
- JIT/Lowererが特定プラグインに依存
|
||
- 汎用性の完全な喪失
|
||
|
||
## 4. 危機回避の瞬間
|
||
|
||
### 開発者の直感的疑問
|
||
```
|
||
「ん?大丈夫?JITのpython用のハードコーディングにならない?汎用的につかえるやつ?」
|
||
```
|
||
|
||
### この一言が引き金となり:
|
||
1. 設計の本質的な問題に気づく
|
||
2. ChatGPT5も即座に方向転換
|
||
3. Handle-First の汎用設計へ
|
||
|
||
## 5. 根本原因の分析
|
||
|
||
### 5.1 爆速開発の心理
|
||
- 「あと少しで完成」の興奮
|
||
- 批判的思考の低下
|
||
- 目の前の問題解決に集中しすぎ
|
||
|
||
### 5.2 パターン認識の罠
|
||
- 他言語の常識(Module型、Function型)を持ち込む
|
||
- Nyashの独自性を忘れる
|
||
|
||
### 5.3 AI協調の盲点
|
||
- 技術的解決に集中
|
||
- 「そもそも論」を問わない
|
||
- お互いの提案を無批判に受け入れる傾向
|
||
|
||
## 6. 結論
|
||
技術的に正しい解決策が、必ずしも設計哲学的に正しいとは限らない。「Everything is Box」という原則を守ることで、より美しく保守性の高い設計が維持された。 |