The way I read it, tail call elimination is the guaranteed application of tail call optimisation with a well defined meaning of what a tail call is. Eg scheme requires TCE.
Tail call optimisation is a transformation a compiler may choose to do to make code that looks like “return foo(...)” run faster. A compiler may choose to not do it because it might not be implemented or faster or it could make debugging harder. There is no guarantee it will happen.
TCO makes some code faster. TCE allows one to write different looking programs knowing they won’t blow up the stack.
This all being said I think most people mean what I have referred to as TCE when they say TCO.
The way I read it, tail call elimination is the guaranteed application of tail call optimisation with a well defined meaning of what a tail call is. Eg scheme requires TCE.
Tail call optimisation is a transformation a compiler may choose to do to make code that looks like “return foo(...)” run faster. A compiler may choose to not do it because it might not be implemented or faster or it could make debugging harder. There is no guarantee it will happen.
TCO makes some code faster. TCE allows one to write different looking programs knowing they won’t blow up the stack.
This all being said I think most people mean what I have referred to as TCE when they say TCO.