Remix.run Logo
submain 4 days ago

Great work :). Go doesn't have TCO. That means functional languages (no for loops) could blow up the stack. How did you solve that?

kubb 4 days ago | parent [-]

You can just compile any tail recursive function to a function with a loop and no recursion.

1-more 4 days ago | parent | next [-]

This is in fact how Elm does it! Tail call recursion compiles to a while loop.

srean 3 days ago | parent | prev | next [-]

That does not address the use case where I find tail recursion most tempting. That would be mutually recursive functions.

If the function can be written as an idiomatic loop I probably would do so in the first place.

apgwoz 3 days ago | parent [-]

You _can_ do trampolines, but that is kind of infectious, or needs to be very explicit with extra code, etc.

srean 3 days ago | parent [-]

Indeed. It's not very efficient though. If I remember correctly Scala does this.

adamwk 4 days ago | parent | prev | next [-]

Right but recursion is only a smaller part of why the optimization is important. It means tail-called functions still build on the stack and long function chains—as is common with fp—can overflow

3 days ago | parent | prev [-]
[deleted]