rust
while
for
loop
繰り返し処理

Rustのfor, while true, loopの速さ比べ|修正中

More than 1 year has passed since last update.

この投稿には問題があります

ベンチマークを正確に測るためにDockerを利用する予定なのですが、現在メインPCが壊れており、修理中なため、少々時間がかかります。

旧本文

index付き無限ループするときに、for文、while true、loop文どれを使うのが良いのか気になったので調べてみました。

環境は古いmac book proです。

for文

main.rs
fn main() {
    for i in 0.. {
        if i == 2000000000 {
            break;
        }
    }
}

結果

real    1m3.972s
user    1m1.020s
sys     0m0.604s

遅い

while true

main.rs
fn main() {
    let mut i = 0;
    while true {
        i = i + 1;
        if i == 2000000000 {
            break;
        }
    }
}

これをコンパイルするとWarningが出ます。無限ループしたいときは、while trueではなくloopを使えとのことです。

結果

real    0m9.452s
user    0m7.958s
sys     0m0.097s

警告は出るけど、for文よりは速い。

loop

main.rs
fn main() {
    let mut i = 0;
    loop {
        i = i + 1;
        if i == 2000000000 {
            break;
        }
    }
}

結果

real    0m12.503s
user    0m8.071s
sys     0m0.154s

ん、あれ? while trueの方が速いですね。結構差がついています。

結果

速い while true<loop<for 遅い

という結果になりました。安全性とか考えたらloopを使った方が良いのでしょうが、なぜwhile trueの方が速いのかきになるところです。