ResultBox migration (stage 0): suppress legacy deprecation warnings in box_trait impls; keep dual handling in VM. Fix verifier Display for SuspiciousBarrierContext. Expose VM stats fields to vm_stats module. CLI core_ci guide and script in place.
This commit is contained in:
52
ideas/improvements/2025-08-25-vm-andor-shortcircuit.md
Normal file
52
ideas/improvements/2025-08-25-vm-andor-shortcircuit.md
Normal file
@ -0,0 +1,52 @@
|
||||
# VM and/or 短絡評価の実装
|
||||
Status: Pending (80%実装済み)
|
||||
Created: 2025-08-25
|
||||
Priority: Low
|
||||
Related-Code: src/backend/vm_instructions.rs::execute_binop()
|
||||
|
||||
## 現状(80%実装)
|
||||
- `as_bool()`で両オペランドを評価してから論理演算を実行
|
||||
- 基本動作は完全に正常、テストもすべて通過
|
||||
- コード:
|
||||
```rust
|
||||
BinOp::And => {
|
||||
let left_bool = left_val.as_bool();
|
||||
let right_bool = right_val.as_bool();
|
||||
Ok(self.allocate_value(VMValue::Bool(left_bool && right_bool)))
|
||||
}
|
||||
```
|
||||
|
||||
## 改善案(残り20%)
|
||||
### 1. 短絡評価の実装
|
||||
- `And`: 左辺がfalseなら右辺の評価をスキップ
|
||||
- `Or`: 左辺がtrueなら右辺の評価をスキップ
|
||||
- 効果: 不要な計算の削減、副作用のある式での正しい動作
|
||||
|
||||
### 2. 実装スケッチ
|
||||
```rust
|
||||
BinOp::And => {
|
||||
let left_val = self.get_value(left)?;
|
||||
if !left_val.as_bool() {
|
||||
// 左辺がfalseなら即座にfalseを返す
|
||||
return Ok(self.allocate_value(VMValue::Bool(false)));
|
||||
}
|
||||
// 左辺がtrueの場合のみ右辺を評価
|
||||
let right_val = self.get_value(right)?;
|
||||
Ok(self.allocate_value(VMValue::Bool(right_val.as_bool())))
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 考慮事項
|
||||
- MIRレベルでの最適化との整合性
|
||||
- デバッグ時のステップ実行への影響
|
||||
- パフォーマンステストの必要性
|
||||
|
||||
## 実装タイミング
|
||||
- [ ] パフォーマンス問題が報告されたら
|
||||
- [ ] 副作用のある式(関数呼び出し等)で問題が発生したら
|
||||
- [ ] Phase 10(最適化フェーズ)で一括対応
|
||||
|
||||
## メモ
|
||||
- 現在の実装でも機能的には問題ない
|
||||
- Pythonも初期は短絡評価なしだった(後から追加)
|
||||
- まずは動くことを優先する80/20ルールの良い例
|
||||
Reference in New Issue
Block a user