MIRI は UB (Undefineded Behavior) の検出ツールである。
unsafe を含む Rust コードの健全性の確認に使われる。
2025 年現在、MIRI はまだ実験段階のためナイトリー版でのみ動作する。
とはいえ、unsafe なコードを扱う場合、筆者はこのツールはほぼ必須だと考えている。
なぜなら、健全性の問題は人間にとって盲点になるものが多い。また、不健全なコードはその時点では問題なく動作しても、将来的な Rust の更新の影響を受ける可能性がある。MIRI はそれらの予防にもなる。
それぞれ以下のコマンドから実行できる。
> rustup +nightly component add miri
> cargo +nightly miri run
> cargo +nightly miri test
実用的な範囲では十分な精度がある。
そのため、MIRI がエラーを検出した場合、そのコードはほぼ確実に不健全である。ただし、MIRI がエラーを検出しない場合でも、その API が確実に健全だとは言えない。なぜなら、UB になるパターンがテストされていないだけの可能性は常にある。
2025 年現在、Rust の unsafe まわりにはまだ曖昧さが残っている。
これに対して、MIRI は二つのモデル Stacked Borrows と Tree Borrows を用意している。どちらでもメモリ安全性は守られるが、後者は制限がより少ない。既定は前者で、後者を試用する場合、環境変数 MIRIFLAGS に -Zmiri-tree-borrows を指定するとよい。