2017-07-06 15 views
2

ブール値に対して `if let`と` if`の間にパフォーマンスの違いはありますか?たとえば

let mut v = vec![2, 3, 4]; 
if let false = v.is_empty() { 
    v.push(5); 
} 

VS:

let mut v = vec![2, 3, 4]; 
if !v.is_empty() { 
    v.push(5); 
} 

私の直感では、それは些細だと関係ないということです。

+1

を*高*関連、そうでない場合:私はまだそれを理解することは簡単ですので、ブール型を好む[場合-ましょう条件が良い場合は正常ですか?](https://でのstackoverflow .com/q/37048629/155423) – Shepmaster

+1

どうして 'if v.is_empty()== false {}'?それは明白であり、無駄な「let」はありません。 – Boiethios

答えて

4

パフォーマンスに関する質問については、を確認する必要があります。それ以外のものは本質的に推測しています。最初のレベルの推測として

しかし、あなたが生成されたアセンブリを見ることができますが:アセンブリ錆1.18を使用し、二つの機能を差分のために上記のコードをコンパイルする

#![crate_type="lib"] 

pub fn one() { 
    let mut v = vec![2, 3, 4]; 
    if let false = v.is_empty() { 
     v.push(5); 
    } 
} 

pub fn two() { 
    let mut v = vec![2, 3, 4]; 
    if !v.is_empty() { 
     v.push(5); 
    } 
} 

はほとんど一定で、ラベルの周りに最小限の違いを示し、名前:

--- a.asm 2017-07-06 13:53:29.000000000 -0400 
+++ b.asm 2017-07-06 13:53:48.000000000 -0400 
@@ -1,2 +1,2 @@ 
-_ZN10playground3one17hbd49bc1da7229962E: 
-.Lfunc_begin0: 
+_ZN10playground3two17h3228f5d5d04f0491E: 
+.Lfunc_begin1: 
@@ -5 +5 @@ 
- .cfi_lsda 27, .Lexception0 
+ .cfi_lsda 27, .Lexception1 
@@ -7 +7 @@ 
-.Ltmp8: 
+.Ltmp14: 
@@ -10 +10 @@ 
-.Ltmp9: 
+.Ltmp15: 
@@ -12 +12 @@ 
-.Ltmp10: 
+.Ltmp16: 
@@ -18 +18 @@ 
- je .LBB1_8 
+ je .LBB2_8 
@@ -23 +23 @@ 
- movaps .LCPI1_0(%rip), %xmm0 
+ movaps .LCPI2_0(%rip), %xmm0 
@@ -25 +25 @@ 
-.Ltmp5: 
+.Ltmp11: 
@@ -28 +28 @@ 
-.Ltmp6: 
+.Ltmp12: 
@@ -36 +36 @@ 
- je .LBB1_4 
+ je .LBB2_4 
@@ -40 +40 @@ 
-.LBB1_4: 
+.LBB2_4: 
@@ -44 +44 @@ 
-.LBB1_8: 
+.LBB2_8: 
@@ -46,2 +46,2 @@ 
-.LBB1_5: 
-.Ltmp7: 
+.LBB2_5: 
+.Ltmp13: 
@@ -51 +51 @@ 
- je .LBB1_7 
+ je .LBB2_7 
@@ -56 +56 @@ 
-.LBB1_7: 
+.LBB2_7: 

私には、それは同じであることが十分に証明されています。だまされやすい人

let mut v = vec![2, 3, 4]; 
if !v.is_empty() { 
    v.push(5); 
} 
+0

私はOPを理解しています。 '!'は本当に読みやすいわけではありません。目でコードをすばやくスキャンすると、これを簡単にスキップできます。私は 'not'キーワードを好むでしょう。 – Boiethios

+0

@Boiethios:私はこれに賛成です、なぜなら、このポジションにいるのであれば、それは見逃しやすいからです!つまり、 '!v'と' lv'/'iv'の違いは正確には目立っていません。 @MatthieuM。 –

+0

残念なことに、下位互換性のために、チームは決してそのような急変を考慮しません。 – Boiethios

関連する問題