| ▲ | dxxvi a day ago | ||||||||||||||||||||||
Is x = !x faster than x.toggle() because from my naked eyes no function is called? Or does the compiler know that the function toggle should be replace with `!=`? If the compiler does know that, how is that knowledge implemented? Is there a table of special functions that should be replaced with something else? Or some more clever way? | |||||||||||||||||||||||
| ▲ | tialaramex a day ago | parent | next [-] | ||||||||||||||||||||||
Thanks to Matt Godbolt, we can ask Compiler Explorer! https://rust.godbolt.org/z/dPn3Y4r59 The optimizer gives the exact same machine code for both functions, and so it just outputs a single function and gives it an alias. The compiler has a technique called "inlining" https://en.wikipedia.org/wiki/Inline_expansion The LLVM backend used by Rust is jokingly said to have a inlining heuristic of "yes" ie it will always try to inline everything because that's usually faster. | |||||||||||||||||||||||
| |||||||||||||||||||||||
| ▲ | lern_too_spel a day ago | parent | prev [-] | ||||||||||||||||||||||
It has the #[inline] attribute. | |||||||||||||||||||||||
| |||||||||||||||||||||||