Remix.run Logo
▲ tialaramex a day ago

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.

▲xiej a day ago | parent [-]

Unfortunately it's not inlined in debug/no optimization mode so that's rough.

▲saghm a day ago | parent | next [-]

I'll go out on a limb and hypothesize that there are going to be much larger difference between debug and release mode for any non-trivial code that the overhead of `toggle` in debug mode will quite literally never end up mattering to anyone in practice.

▲lanyard-textile 20 hours ago | parent | prev [-]

Why should it be? That's a feature of debug.