Rust has plans for a `become` operator for tail call optimization.
Clojure's recur is kinda-close, I guess?
It is, but Clojure uses it, because it cannot really do Tail Call Optimization due to constraints on the JVM. Therefore "recur" is required to keep the Stack from overflowing.