There's more...

Our implementation also employs another optimization: tail call optimization, or TCO for short. In oversimplified terms, TCO happens when the compiler is able to rewrite a recursive algorithm into an imperative one. More generally, TCO is when the compiler can compile a recursive call into a form that doesn't add a new stack frame per call, and as a consequence, can't cause a stack overflow (not the website, but the error). For a good discussion on the topic, see https://stackoverflow.com/questions/310974/what-is-tail-call-optimization.

Although Rust doesn't support TCO per se (see the RFC at https://github.com/rust-lang/rfcs/issues/271), the lower-level LLVM does. It requires the last call of a function to be a call to itself. The last line of inner [40] is a call to inner, so it's eligible for TCO.

This is somewhat hard to guarantee in bigger Rust algorithms, though, as objects implementing the Drop trait will inject a call to drop() at the end of a function, removing any possibility of TCO.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.118.162.201