2017-06-03 8 views
3

loop体内に設定されている初期化されていない値の理由を除いて、loopが存在する他の魅力的な理由はありますか?Rustコンパイラは `loop`と` while true`でどのような最適化を行いますか?

+0

関連性の高い質問:https://stackoverflow.com/q/28892351/1233251 –

+0

ありがとう。しかし、私は私の声明で「ループ本体内に設定されている初期化されていない値については理由があるという事実は、他のどの方法でコンパイラの最適化のための手段が得られるかを知ることに興味があった。 –

+0

確かに、私はそれを複製と呼んでいません。しかし、それは外部リソースを含む重要な情報を含んでいます。 –

答えて

1

あなたが意図したこと以外は、違いはありません。コンパイラで正規化が行われると、すべてのループは同じになります。

example of a loop in the Rust playgroundおよびthe same example with a while trueを参照してください。生成されたアセンブリはまったく同じです。コンパイラはwhile trueの例に対して、代わりにloopを使用するよう警告します。

+0

これは何らかの方法で証明できますか? – Shepmaster

+0

@Shepmaster証明が必要な場合はMIRまたはASMの出力を比較できます – the8472

+0

@ the8472アセンブリ(およびおそらく関連する最適化)が単一のケース*(これはかなり低いバーです)で同じであることを証明するだけです。私は、たとえそこに到達するためのパスが完全に異なっていても(つまり利用可能な最適化が異なる場合でも)同じアセンブリにコンパイルされた激しく異なるコードサンプルを想像することができます。 – Shepmaster

関連する問題