On Sunday, 10 July 2016 at 17:16:10 UTC, Ola Fosheim Grøstad
On Sunday, 10 July 2016 at 17:10:32 UTC, Dietrich Daroch wrote:
Annotating every callsite seems uncomfortable, being able to
perform TCO is a property of the function and not something
that might look call-site dependant.
You only need to annotate the location where the function calls
itself. The function might want some recursive calls to work
without tail recursion restrictions and at the same time use
tail recursion at the end.
Or do you mean that this should prevent all kinds of recursion?
That is a quite demanding analysis. For instance, the function
could get itself passed in as a parameter...
My bad, I misunderstood your point. Annotating recursive calls
seems more flexible.
Now the question is how should they be annotated? pragma is
verbose, but avoids adding keywords.
I think a constant stack size annotation would still make sense,
but might not promise that stack overflows are not possible if a
lot of local data is used and a big, but constant numbers of
calls are made.
It might be interesting to have proof that the stack is bounded
(and won't overflow).