[RFC 2011] Optimize non-consuming operators by c410-f3r · Pull Request #98337 · rust-lang/rust (original) (raw)
Tracking issue: #44838
Fifth step of #96496
The most non-invasive approach that will probably have very little to no performance impact.
Current behaviour
Captures are handled "on-the-fly", i.e., they are performed in the same place expressions are located.
// let a = 1; let b = 2; assert!(a > 1 && b < 100);
if !(
{ try capture a
and then return a
} > 1 && { try capture b
and then return b
} < 100
) {
panic!( ... );
}
As such, some overhead is likely to occur (Specially with very large chains of conditions).
New behaviour for non-consuming operators
When an operator is known to not take self
, then it is possible to capture variables AFTER the condition.
// let a = 1; let b = 2; assert!(a > 1 && b < 100);
if !( a > 1 && b < 100 ) {
{ try capture a
}
{ try capture b
}
panic!( ... );
}
So the possible impact on the runtime execution time will be diminished.
r? @oli-obk