What is the penalty that compilers pay these days for allowing
"proper" tail-recursion (that does not grow the stack)?
It used to be that implementations targetting C would use
the
while (1) {cont=(*cont)();}
trick, which would lose a factor of 2 or so in speed IIRC.
If the compiler generates native code, then the penalty I believe
consists mainly of the "opportunity cost" of not targetting C and thus
not being able to piggyback on GCC development efforts, but there may be
costs which I'm failing to visualize from the fact that the hardware is
specialized to handle the conventional way of iterating (ie, structured
looping constructs).
Please share answers for other languages like Mercury, even
though some might think it slightly off-topic...