Joe Armstrong explaining the concept on the erlang mailing list in 2016, https://erlang.org/pipermail/erlang-questions/2016-October/0...
""" Languages like Erlang must implement tail call optimizations, since persisted data is stored as "loop variables" in infinite loops. This happens when we write code like this:
loop(Data) ->
....
...
loop(newData).
When I see code like this I mentally "see" the last call as a "jump"
to the start of the code, rather than a recursive call to loop.
"""What is the loop(Data), loop(newData) doing? Would be great if someone could elaborate on this point.