<div dir="ltr"><div><div>To be clear I meant, the VM knows *statically* whether to write code for a regular call or a tail call and that it is *possible* to do something *clever* by inspecting and rewriting the stack.  Specifically, if you can inspect the stack for something that is inserted before performing the first tail call it is *possible* possible to distinguish.   This is both complicated and potentially costly and very likely not worth the effort.  </div><div><br><div><br></div><div><br><br><br><br><br></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 19, 2016 at 1:53 AM, Andreas Rossberg <span dir="ltr"><<a href="mailto:rossberg@google.com" target="_blank">rossberg@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On 19 February 2016 at 10:29, Andreas Rossberg <span dir="ltr"><<a href="mailto:rossberg@google.com" target="_blank">rossberg@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span>On 19 February 2016 at 06:29, John Lenz <span dir="ltr"><<a href="mailto:concavelenz@gmail.com" target="_blank">concavelenz@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>However, at the CPU level, it seems like you would be better pushing an return address for a special function that indicated the start of a sequence of tail calls.  That way you trade only some complexity/performance for tail calls (an inspection of the last entry of the call stack) and some stack frame building complexity (to recognize this "special" frame).</div></div></div></div></blockquote><div><br></div></span><div>There is no way of knowing, neither statically nor dynamically, that you are at "the start of a sequence of tail calls". And doing it for every tail call would of course defeat tail calls.</div></div></div></div></blockquote><div><br></div></span><div>Or to put that differently: if there was, then the very problem wouldn't exist. ;)</div></div></div></div>
</blockquote></div><br></div>