間違っていたら鼻で笑って許してください
MIR interpreter(Miri)
solsonさんが学部生の頃の研究の一環で作った
実験的なMIRのインタプリタ
従来のrustcではチェックできなかったようなことを
Miriはチェックすることができる
現状はrustc内で使われているのは
Constant Evaluationなどで使われている
2/23ごろにrust-langで管理されるようになった(※1)
mid-level intermediate representationの略
導入された理由
厳密な型検査のため
導入された理由をもう少し掘り下げる
順番に変換されていく。役割がそれぞれ違う
solsonさんのスライドを引用。HAIRは省略されてる模様
以下のようなことに対してエラーを出力してくれる
範囲外のメモリアクセス
fn main() {
let a = [1, 2, 3];
let b = 3;
a[b];
}
error[E0080]: constant evaluation error: index out of bounds: the len is 3 but the index is 3
--> src/main.rs:16:5
|
16 | a[b];
| ^^^^ index out of bounds: the len is 3 but the index is 3
|
Constant Evalulationなどで使われている模様
// ここではまだ評価されない
const FOO: usize = 1 << 12;
// ここで初めて評価される
type Foo = [u8; FOO - 42];
使う前の事前準備
正直とても面倒…
# rustcのバージョンの違いですぐ動かなくなるので
# 遊びたい際にちゃんとイメージから作る
git clone https://github.com/rchaser53/miri-slide-demo.git
cd miri-slide-demo
sh create.sh
# 開発しているレポジトリに移動して使う
cd path/to/project
docker run -it $(pwd):/home/app miri:ubuntu-18.04 bash
cargo +nightly miri run
色々と既存のバグを解決している模様