「ん?大丈夫?」の一言がPython特化ハードコーディングを防いだ事例を記録。
Everything is Box哲学 vs 技術的正しさの綱渡りからの生還を分析。
- docs/research/paper-09-ai-collaboration-pitfall/ を新規作成
- incident-analysis.md: Lowerer特殊化危機の詳細分析
- ai-collaboration-lessons.md: AI協調開発の教訓
- intuition-in-engineering.md: エンジニアの直感の価値
- summary.md: 綱渡りからの生還まとめ
- 研究論文の1論文1フォルダ原則に従い整理
- Python統合関連の実装修正とビルド成功確認
🛡️ Generated with Claude Code
156 lines
4.1 KiB
Markdown
156 lines
4.1 KiB
Markdown
# JIT論文評価方法論
|
||
|
||
## 評価の3本柱(Gemini先生提案)
|
||
|
||
### 1. 性能評価
|
||
- **ベースライン**: インタープリター、VM(JITなし)
|
||
- **比較対象**: GraalVM/Truffle、V8(可能な範囲で)
|
||
- **測定項目**:
|
||
- スループット(ops/sec)
|
||
- レイテンシ(関数呼び出し)
|
||
- メモリ使用量
|
||
- コンパイル時間
|
||
|
||
### 2. 回復力評価
|
||
- **故障注入実験**:
|
||
- JIT内部での意図的panic
|
||
- メモリ不足状況
|
||
- 無限ループ検出
|
||
- **測定項目**:
|
||
- フォールバック成功率
|
||
- 復旧時間
|
||
- 状態の一貫性
|
||
|
||
### 3. モジュール性評価
|
||
- **拡張性テスト**:
|
||
- 新しい型の追加(Complex、Decimal等)
|
||
- バックエンド交換(Cranelift→LLVM)
|
||
- 新しい最適化パスの追加
|
||
- **測定項目**:
|
||
- 変更必要行数
|
||
- インターフェース安定性
|
||
- ビルド時間への影響
|
||
|
||
## 実験計画
|
||
|
||
### Phase 1: マイクロベンチマーク(実施済み)
|
||
✅ 基本演算(整数、浮動小数点)
|
||
✅ 制御フロー(分岐、ループ)
|
||
✅ PHIノード(値の合流)
|
||
|
||
### Phase 2: アプリケーションベンチマーク(計画中)
|
||
- [ ] フィボナッチ数列(再帰 vs ループ)
|
||
- [ ] 素数判定(計算集約型)
|
||
- [ ] ソートアルゴリズム(配列操作)
|
||
- [ ] 簡易インタープリター(複雑な制御)
|
||
|
||
### Phase 3: ストレステスト(計画中)
|
||
- [ ] 長時間実行(メモリリーク検証)
|
||
- [ ] 並行実行(マルチスレッド環境)
|
||
- [ ] エラー注入(ランダムfault)
|
||
|
||
### Phase 4: 比較評価(計画中)
|
||
- [ ] Node.js相当ベンチマーク移植
|
||
- [ ] Python相当ベンチマーク移植
|
||
- [ ] 実行時間・メモリ使用量比較
|
||
|
||
## データ収集自動化
|
||
|
||
### ベンチマークハーネス
|
||
```nyash
|
||
// benchmark_suite.nyash
|
||
static box BenchmarkRunner {
|
||
init { timer, results }
|
||
|
||
constructor() {
|
||
me.timer = new TimerBox()
|
||
me.results = new MapBox()
|
||
}
|
||
|
||
runBenchmark(name, func, iterations) {
|
||
local start = me.timer.now()
|
||
|
||
loop(i < iterations) {
|
||
func()
|
||
i = i + 1
|
||
}
|
||
|
||
local elapsed = me.timer.now() - start
|
||
me.results.set(name, elapsed / iterations)
|
||
}
|
||
|
||
exportResults() {
|
||
return me.results.toJson()
|
||
}
|
||
}
|
||
```
|
||
|
||
### 統計収集スクリプト
|
||
```bash
|
||
#!/bin/bash
|
||
# collect_stats.sh
|
||
|
||
echo "=== Nyash JIT Benchmark Suite ==="
|
||
|
||
# 環境変数設定
|
||
export NYASH_JIT_EXEC=1
|
||
export NYASH_JIT_THRESHOLD=1
|
||
export NYASH_JIT_STATS_JSON=1
|
||
|
||
# 各ベンチマーク実行
|
||
for bench in benchmarks/*.nyash; do
|
||
echo "Running: $bench"
|
||
./target/release/nyash --backend vm "$bench" > "results/$(basename $bench .nyash).json"
|
||
done
|
||
|
||
# 結果集計
|
||
python3 aggregate_results.py results/*.json > final_report.md
|
||
```
|
||
|
||
## 再現性の確保
|
||
|
||
### 環境記録
|
||
- Git commit hash
|
||
- Rustコンパイラバージョン
|
||
- OS/カーネル情報
|
||
- CPU/メモリ情報
|
||
- 環境変数設定
|
||
|
||
### 結果アーカイブ
|
||
```
|
||
results/
|
||
├── 2025-08-27/
|
||
│ ├── environment.json
|
||
│ ├── raw_data/
|
||
│ │ ├── fib_recursive.json
|
||
│ │ ├── fib_iterative.json
|
||
│ │ └── ...
|
||
│ └── summary_report.md
|
||
```
|
||
|
||
## 統計的妥当性
|
||
|
||
### 測定方法
|
||
1. **ウォームアップ**: 最初の10回は除外
|
||
2. **繰り返し**: 最低100回実行
|
||
3. **外れ値除去**: 上下5%を除外
|
||
4. **信頼区間**: 95%信頼区間を算出
|
||
|
||
### レポート形式
|
||
- 平均値 ± 標準偏差
|
||
- 中央値(外れ値の影響を排除)
|
||
- 最小値・最大値
|
||
- ヒストグラム(分布の可視化)
|
||
|
||
## 論文での提示方法
|
||
|
||
### 図表案
|
||
1. **性能グラフ**: ベンチマーク別の実行時間比較
|
||
2. **フォールバック率**: エラー注入量とフォールバック成功率
|
||
3. **モジュール性**: 機能追加時の変更行数比較
|
||
4. **アーキテクチャ図**: 箱境界とJIT/VMの関係
|
||
|
||
### 主張の裏付け
|
||
- 定量的データ(ベンチマーク結果)
|
||
- 定性的分析(コード複雑度、保守性)
|
||
- 事例研究(実際の拡張例) |