3 ms·
CS 101, no? Recursion is easier to write, but less performant and more risky than iteration.
by RajT88 3mo ago
CS 101, no? Recursion is easier to write, but less performant and more risky than iteration.
- valleyer 3mo agoIt's not CS 101 that JavaScript apparently sucks at TCO. That was surprising to me.
- dnbfbfhf 3mo agoThe CS 101 model of computing doesn’t have TCO… which makes it pretty accurate to the real world.
- ckcheng 3mo agoTCO is surprisingly commonly supported in the real world. TCO is supported in C++ compilers, JavaScript in Safari, Scala, Clojure in a way, etc.! For instance: "All current mainstream [C++] compilers perform tail call optimisation fairly well (and have done for more than a decade), even for mutually recursive calls" [1]. "As of July 22, 2023 Safari is the only browser that supports tail call optimization" of JavaScript [2]. "Since Clojure uses the Java calling conventions, it cannot, and does not, make the same tail call optimization guarantees. Instead, it provides the recur special operator, which does constant-space recursive looping" [3]. "The Scala compiler will automatically optimize any truly tail-recursive method. If you annotate a method that you believe is tail-recursive with the @tailrec annotation, then the compiler will warn you if the method is actually not tail-recursive" [4]. [1]: https://stackoverflow.com/a/34129 https://stackoverflow.com/a/34129 [2]: https://stackoverflow.com/a/37224563 https://stackoverflow.com/a/37224563 [3]: https://stackoverflow.com/a/34097339 https://stackoverflow.com/a/34097339 [4]: https://stackoverflow.com/a/3114245 https://stackoverflow.com/a/3114245
- ignoramous 3mo agoHeh, reminds me of this talk at !!conf: Tail Call Optimization: The Musical, https://youtu.be/-PX0BV9hGZY https://youtu.be/-PX0BV9hGZY (2019).
- sras-me 3mo ago>Recursion is easier to write And read..
- LPisGood 3mo agoYou’ve never read a 5000 line recursive method that returns different numbers of arguments depending on where it chose to execute the recursive call.
- palata 3mo agoBad code is hard to read, that is orthogonal to the fact that it is recursive.
- tikhonj 3mo agoIf all you do is replace the recursion in that example with one (or more) loops with mutable indexes, chances are the code will get worse.
- LPisGood 3mo agoOh don’t worry it had more than a half dozen of those nested as well
- veqq 3mo agoRisky?
- makr17 3mo agoPresumably stack depth and overflow.
- mypalmike 3mo agoI once wrote a Xbox 360 indie game that would crash only in unusual situations due to stack overflow. The game involved essentially gluing together balls, and it would detect if the balls surrounded something. I used recursive DFS to check connectivity of the balls. And most of the time, there would be a couple dozen balls max connected. But you could definitely intentionally connect many many more balls if you wanted to. At a certain point, it would crash with a stack overflow. Changing it to not use recursion (explicit data structures) fixed the crash.
- dreamcompiler 3mo agoTail recursive functions on a tail-jump optimized compiler can be as performant as loops. If the compiler was written by someone who has read the Steele papers, it generates the same assembly code in both cases.