Clojure does tail-call elimination for simple cases with loop/recur. This is by far the most common case. Most other tail-recursive situations can be represented as lazy sequences, which are another way to handle recursive functions without consuming stack space. For the final rare cases (e.g. mutually recursive functions) Clojure has `trampoline`, which does something similar to (on first glance) Erjang.
One nice thing about Clojure's approach is that any function can be invoked from Java just like any other method. On a quick read, I can't tell if the Erjang approach requires special handling from Java code. The underlying goal of Clojure's recursion semantics is to always be explicit about where compilation strategies will differ. Loop/recur, lazy seqs, and trampoline all have different performance characteristics. You don't have to guess which method is being used. -Stuart Sierra clojure.com -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en