4 ms·
I think its Rich Hickey who said something to the effect that tail calls are so fundamental that the underlying platform should be providing them.
by kamaal 4y ago
I think its Rich Hickey who said something to the effect that tail calls are so fundamental that the underlying platform should be providing them.
- convolvatron 4y agotail calls are so fundamental that its trivial to build a call-push, return-pop stack calling protocol on top of them, but not the converse
- kaba0 4y agoCould you point me to some further info on this?
- convolvatron 4y agosorry, its kind of ... basic? the kind of generalized tail call I'm talking about is generally referred to as a continuation. its easiest to think of it as a jump. so you can imagine that if we have jump and a stack register, we can push+jump and thats the same as 'call'. we can pop+jump and thats the same as 'return'. since 'call' and 'return' have side effects, we cant really use them to replace jump. so thats really straightforward, but things do get a bit screwy. if we can support arbitrary jumps, and the frame storage (arguments + locals) cant necessarily go on a stack because our frames might have arbitrary liftimes, so we cant reclaim them in stack order. so in a scheme for example we just pull in a gc and track references to these closures and dust our hands off with a smirk. if that doesn't work for you then you have to adopt some kind of framework that lets you know explicitly when these can be released. reference counting is a poor choice here because these references between frames can easily be cyclic.
- morenoh149 4y agohttps://en.wikipedia.org/wiki/Tail_call https://en.wikipedia.org/wiki/Tail_call
- dan-robertson 4y agoAnd yet Clojure doesn’t have general tail calls (it has recur which allows something like tail calls so long as they are non-mutually recursive) and seems to do ok.
- kamaal 4y agoYes its in the context of Clojure, his point is tail calls should be provided in JVM itself, it can then be added to Clojure.
- deleted 4y ago[deleted]