4 ms·
> In languages like Scala, Java, C#, and Swift, it basically never happens. Scalaz and cats use tail calls extensively and wouldn't be possible without them.
by light_hue_1 4y ago
> In languages like Scala, Java, C#, and Swift, it basically never happens.
Scalaz and cats use tail calls extensively and wouldn't be possible without them.
- kragen 4y agoHow does that work on the JVM?
- yw3410 4y agoScala only does single method tail recursion and rewrites it into a while loop. Cats and other libraries use a technique called trampolining which basically moves the frames to the heap (or a mixed technique where they do recurse a certain depth on the stack before switching to trampolining).
- kragen 4y agoThat sounds like it means that Scala doesn't support general tail-call elimination, so people don't write mutually tail-recursive code, instead transforming things that would naturally be expressed that way into a different structure that Scala does support.
- yw3410 4y agoYes. It can be a major PITA, in certain problem spaces and I think most people don't pretend it's a great solution but ultimately accept it as a limitation of being hosted on the JVM.