129 lines
3.3 KiB
Markdown
129 lines
3.3 KiB
Markdown
|
|
# 実験計画 - VM Stepping Stone論文
|
|||
|
|
|
|||
|
|
## 実験1: 開発効率の定量化
|
|||
|
|
|
|||
|
|
### 1.1 コミット履歴分析
|
|||
|
|
```bash
|
|||
|
|
# MIR実装期間
|
|||
|
|
git log --after="2024-08-01" --before="2024-09-01" --oneline | grep -i mir | wc -l
|
|||
|
|
|
|||
|
|
# VM実装期間
|
|||
|
|
git log --after="2024-09-01" --before="2024-11-01" --oneline | grep -i vm | wc -l
|
|||
|
|
|
|||
|
|
# LLVM実装期間
|
|||
|
|
git log --after="2024-11-01" --before="2025-02-01" --oneline | grep -i llvm | wc -l
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 1.2 コード再利用率測定
|
|||
|
|
- VM実装のコード行数
|
|||
|
|
- LLVMで再利用されたパターン数
|
|||
|
|
- 共通FFI/ABIコードの割合
|
|||
|
|
|
|||
|
|
## 実験2: デバッグ効率の測定
|
|||
|
|
|
|||
|
|
### 2.1 バグ修正時間の比較
|
|||
|
|
- VM実装時のバグ修正時間(Issue解決までの時間)
|
|||
|
|
- LLVM実装時のバグ修正時間(VM比較による短縮効果)
|
|||
|
|
|
|||
|
|
### 2.2 具体例: VInvokeバグ
|
|||
|
|
- 問題: argc処理でLLVMが-1していた
|
|||
|
|
- 解決時間: VMとの比較で即座に特定(約30分)
|
|||
|
|
- 従来手法での推定時間: 2-3時間
|
|||
|
|
|
|||
|
|
## 実験3: パフォーマンス測定
|
|||
|
|
|
|||
|
|
### 3.1 ベンチマークプログラム
|
|||
|
|
```nyash
|
|||
|
|
// fibonacci.nyash
|
|||
|
|
static box Main {
|
|||
|
|
fib(n) {
|
|||
|
|
if n < 2 {
|
|||
|
|
return n
|
|||
|
|
}
|
|||
|
|
return me.fib(n - 1) + me.fib(n - 2)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
main() {
|
|||
|
|
return me.fib(35)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.2 測定項目
|
|||
|
|
- Interpreter実行時間
|
|||
|
|
- VM実行時間
|
|||
|
|
- LLVM実行時間
|
|||
|
|
- メモリ使用量
|
|||
|
|
|
|||
|
|
### 3.3 プラグイン呼び出しオーバーヘッド
|
|||
|
|
```nyash
|
|||
|
|
// plugin_bench.nyash
|
|||
|
|
static box Main {
|
|||
|
|
main() {
|
|||
|
|
local m = new MapBox()
|
|||
|
|
local i = 0
|
|||
|
|
loop(i < 1000000) {
|
|||
|
|
m.set(i, i * 2)
|
|||
|
|
local v = m.get(i)
|
|||
|
|
i = i + 1
|
|||
|
|
}
|
|||
|
|
return 0
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 実験4: コード品質分析
|
|||
|
|
|
|||
|
|
### 4.1 重複コードの削減
|
|||
|
|
- VM実装での重複コード
|
|||
|
|
- LLVM実装での削減量
|
|||
|
|
|
|||
|
|
### 4.2 アーキテクチャの一貫性
|
|||
|
|
- プラグインABIの統一度
|
|||
|
|
- エラー処理の一貫性
|
|||
|
|
|
|||
|
|
## 実験5: 一般化可能性の検証
|
|||
|
|
|
|||
|
|
### 5.1 他言語への適用シミュレーション
|
|||
|
|
- 小規模言語での検証
|
|||
|
|
- 必要な前提条件の洗い出し
|
|||
|
|
|
|||
|
|
### 5.2 適用可能な言語の特徴
|
|||
|
|
- プラグインシステムを持つ
|
|||
|
|
- 統一的な型システム
|
|||
|
|
- FFI/ABIが重要な役割を持つ
|
|||
|
|
|
|||
|
|
## データ収集スクリプト
|
|||
|
|
|
|||
|
|
### collect_metrics.sh
|
|||
|
|
```bash
|
|||
|
|
#!/bin/bash
|
|||
|
|
# 開発メトリクス収集スクリプト
|
|||
|
|
|
|||
|
|
echo "=== Development Timeline ==="
|
|||
|
|
echo "MIR commits:"
|
|||
|
|
git log --after="2024-08-01" --before="2024-09-01" --oneline | grep -iE "(mir|MIR)" | wc -l
|
|||
|
|
|
|||
|
|
echo "VM commits:"
|
|||
|
|
git log --after="2024-09-01" --before="2024-11-01" --oneline | grep -iE "(vm|VM)" | wc -l
|
|||
|
|
|
|||
|
|
echo "LLVM commits:"
|
|||
|
|
git log --after="2024-11-01" --before="2025-02-01" --oneline | grep -iE "(llvm|LLVM)" | wc -l
|
|||
|
|
|
|||
|
|
echo "=== Code Statistics ==="
|
|||
|
|
echo "VM implementation:"
|
|||
|
|
find src/backend/vm* -name "*.rs" -exec wc -l {} + | tail -1
|
|||
|
|
|
|||
|
|
echo "LLVM implementation:"
|
|||
|
|
find src/backend/llvm* -name "*.rs" -exec wc -l {} + | tail -1
|
|||
|
|
|
|||
|
|
echo "Shared runtime:"
|
|||
|
|
find src/runtime -name "*.rs" -exec wc -l {} + | tail -1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 期待される結果
|
|||
|
|
|
|||
|
|
1. **開発時間の短縮**: VM経由により全体の開発時間が30-40%短縮
|
|||
|
|
2. **バグ修正の高速化**: デバッグ時間が平均60-70%削減
|
|||
|
|
3. **コード品質向上**: 再利用により一貫性のあるコードベース
|
|||
|
|
4. **性能**: LLVMはVMの10-50倍高速(プログラムによる)
|