> But the compiler controls both the caller and callee.
Why? In functional languages, it's common for an exported function from one compilation context to tail call into an exported function from another.
Functional languages may be designed to support TCO from the ground up, up to supporting it across module boundaries. C is not like that, and calling into an external module necessarily grows the stack.
Functional languages may be designed to support TCO from the ground up, up to supporting it across module boundaries. C is not like that, and calling into an external module necessarily grows the stack.