Loops and Tail Recursion
Loops and Tail Recursion
There is an equivalence between loops and tail recursive functions. Let's
revisit the simple counting loop example from before:
This loop can be implemented using a feature that performs a tail recursive call
as follows
Tail recursion means that a feature performs no more code after a recursive call
to itself. For the compiler, this means that there is no need to create a new
stack frame for the call. Instead, the current stack frame can be reused, new
values can be assigned to the argument fields and the call can be implemented by
a simple branch to the beginning of the code of the feature.
The Fuzion intermediate language represents loops using tail recursion. The code
generator back ends guarantee to optimize tail recursive calls as described here.
This has two important consequences: First, for the developer, code can be
written using loops or tail recursive functions. There is no performance benefit
using one over the other. Second, analysis tools become simpler, there is no
need for loop analysis, it is sufficient to support analysis of recursion (which
is what those adept at static analysis tend to prefer).
last changed: 2024-06-28