Files
hakorune/docs/research/paper-12-vm-stepping-stone/key-insights.md

110 lines
3.7 KiB
Markdown
Raw Normal View History

# Key Insights: VM as a Stepping Stone
## 核心的な発見
### 1. 偶然から生まれた方法論
#### 当初の計画2024年8月
```
MIR → VM (インタープリタ実行用)
MIR → LLVM (ネイティブ実行用)
```
並列に実装する予定だった。
#### 実際の経緯
```
MIR → VM → LLVM
```
実装の都合でVM経由にしたところ、予想外の利点が判明。
### 2. VM層の5つの役割
#### 2.1 Living Specification生きた仕様書
```rust
// VMで確立されたセマンティクス
match instr {
CallPlugin { type_id: 11, method_id: 3, args: [1, 42] }
=> MapBox.set(1, 42) の動作が確定
}
```
#### 2.2 Validation Layer検証層
- MIR生成が正しいか → VMで実行して確認
- プラグインFFIが正しいか → VMで動作確認
- 型システムが健全か → VMで実行時チェック
#### 2.3 Debug Referenceデバッグ基準
```
問題: LLVM実行で "Result: 0" (期待値: "Result: 42"
診断: VM実行 → "Result: 42" → LLVMの実装バグと特定
時間: 30分で解決argc-1の問題
```
#### 2.4 Pattern Establisherパターン確立
```rust
// VM実装で確立したパターン
let tlv_args = encode_tlv_header(argc) + encode_args(args);
call_plugin(type_id, method_id, tlv_args);
// LLVM実装でそのまま再利用
builder.call(nyash_plugin_invoke3_tagged_i64, [type_id, method_id, argc, ...]);
```
#### 2.5 Incremental Complexity段階的複雑性
1. 単純な整数演算 → VM実装 → LLVM移植
2. プラグイン呼び出し → VM実装 → LLVM移植
3. 可変長引数 → VM実装 → LLVM移植
### 3. 定量的効果
#### 開発速度
- MIR設計: 1ヶ月2024年8月
- VM実装: 2ヶ月2024年9-10月
- LLVM実装: 3ヶ月2024年11月-2025年1月
- **合計: 6ヶ月でネイティブコンパイラ完成**
#### コード再利用
```
src/runtime/plugin_loader_v2.rs - VM/LLVM共通
src/runtime/plugin_ffi_common.rs - VM/LLVM共通
crates/nyrt/ - 完全共有
→ 約80%のランタイムコードを共有
```
#### デバッグ効率
- VInvokeバグ: 30分で解決VM比較
- 推定: 従来手法なら2-3時間
### 4. 一般化可能な条件
#### この手法が有効な言語の特徴
1. **統一的な実行モデル**: Everything is Box のような統一概念
2. **プラグインシステム**: FFI/ABIが重要な役割
3. **段階的な機能追加**: 基本機能から複雑な機能へ
#### 適用が難しい場合
1. VMとネイティブで根本的に異なる実行モデル
2. 極度に最適化されたネイティブコードが必要
3. VM実装のオーバーヘッドが許容できない
### 5. 理論的含意
#### ソフトウェア工学的視点
- **Iterative Refinement**: VM→LLVMは自然な洗練プロセス
- **Separation of Concerns**: 正しさVMと性能LLVMの分離
- **Fail Fast**: 問題をVM段階で早期発見
#### プログラミング言語理論的視点
- **Semantic Preservation**: VMセマンティクスの保存性
- **Bisimulation**: VM実行とLLVM実行の等価性証明が容易
- **Gradual Verification**: 段階的な正しさの確認
### 6. 今後の研究課題
1. **自動化**: VM実装からLLVM実装への自動変換
2. **形式的証明**: VM-LLVM等価性の形式的証明
3. **最適化**: VM実行情報を使ったLLVM最適化
## まとめ
「VM as a Stepping Stone」パターンは、偶然の発見から生まれた実用的な言語実装手法である。特に、プラグインシステムを持つ言語や、統一的な実行モデルを持つ言語において、開発効率とコード品質の両面で大きな利点をもたらす。