The fact that it didn't originally is irrelevant. And the fact that you have to provide a flag because of performance is irrelevant. It still remains that Kawa appears to do full tail call optimization on the JVM. So it can't be that Clojure doesn't do it because the JVM doesn't permit it. So what's really going on here?
Comments
The fact that it didn't originally is irrelevant. And the fact that you have to provide a flag because of performance is irrelevant. It still remains that Kawa appears to do full tail call optimization on the JVM. So it can't be that Clojure doesn't do it because the JVM doesn't permit it. So what's really going on here?
Kawa emulates it by adding overhead that interprets and replaces code with loops.
Clojure is instead waiting for a solution on JVM-level.
Performance isn't irrelevant to the question of "what's really going on here".
If it costs too much at run time, Clojure absolutely should not implement it. Lack of TCO isn't that big of a deal.