The implementation looks good!  It is indeed possible to implement ,\_MR
 via exceptions, local continuations, or prompts as Anthony has here.  
While I can't speak for Olin, I expect that his point is that 
implementing the transformations we discuss in the paper practically 
would require a (possibly byte-code) compiler that knew about 
multi-returns internally.  I don't know Racket internals well enough to 
discuss prompts, but I imagine they don't allow the kinds of tail-call 
optimizations that such a compiler would.<br>
<br>Dave<br><br><div class="gmail_quote">On Tue, Feb 21, 2012 at 9:32 AM, J. Ian Johnson <span dir="ltr">&lt;<a href="mailto:ianj@ccs.neu.edu">ianj@ccs.neu.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Perhaps I remembered wrong about interpretation, but I do know he said that he didn&#39;t have a good implementation story - he must not have been very satisfied with that journal article.<br>
<div class="im HOEnZb"><br>
-Ian<br>
----- Original Message -----<br>
</div><div class="HOEnZb"><div class="h5">From: &quot;Sam Tobin-Hochstadt&quot; &lt;<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a>&gt;<br>
To: &quot;J. Ian Johnson&quot; &lt;<a href="mailto:ianj@ccs.neu.edu">ianj@ccs.neu.edu</a>&gt;<br>
Cc: &quot;Anthony Carrico&quot; &lt;<a href="mailto:acarrico@memebeam.org">acarrico@memebeam.org</a>&gt;, <a href="mailto:users@racket-lang.org">users@racket-lang.org</a><br>
Sent: Tuesday, February 21, 2012 8:45:06 AM GMT -05:00 US/Canada Eastern<br>
Subject: Re: [racket] Multi-return Function Call<br>
<br>
That seems very surprising, since the journal paper (JFP 2006) about<br>
MRLC talks a lot about implementation strategies, and includes<br>
performance measurements for a compiler that implements MRLC.<br>
<br>
I think Anthony&#39;s implementation resembles the implementation in terms<br>
of exceptions discussed in section 11.1 of that paper.<br>
<br>
On Tue, Feb 21, 2012 at 8:15 AM, J. Ian Johnson &lt;<a href="mailto:ianj@ccs.neu.edu">ianj@ccs.neu.edu</a>&gt; wrote:<br>
&gt; I don&#39;t have the time right now to go through your implementation, but I will say that I&#39;ve talked to Olin directly about implementing \lambda_{MR} and he answered that it he could not think of any good implementation story beyond interpretation.<br>

&gt;<br>
&gt; -Ian<br>
&gt; ----- Original Message -----<br>
&gt; From: &quot;Anthony Carrico&quot; &lt;<a href="mailto:acarrico@memebeam.org">acarrico@memebeam.org</a>&gt;<br>
&gt; To: <a href="mailto:users@racket-lang.org">users@racket-lang.org</a><br>
&gt; Sent: Monday, February 20, 2012 8:21:06 PM GMT -05:00 US/Canada Eastern<br>
&gt; Subject: [racket] Multi-return Function Call<br>
&gt;<br>
&gt; It is only 60 LOC, so go ahead and take a look:<br>
&gt;  <a href="https://github.com/acarrico/multi" target="_blank">https://github.com/acarrico/multi</a><br>
&gt;<br>
&gt; README:<br>
&gt;<br>
&gt; AUTHOR: Anthony Carrico &lt;<a href="mailto:acarrico@memebeam.org">acarrico@memebeam.org</a>&gt;<br>
&gt;<br>
&gt; This is an implementation of Olin Shivers&#39;/David Fisher&#39;s<br>
&gt; &quot;Multi-return Function Call&quot;. I&#39;ll quote from the abstract of their<br>
&gt; paper:<br>
&gt;<br>
&gt;  &quot;It is possible to extend the basic notion of &#39;function call&#39; to<br>
&gt;  allow functions to have multiple return points. This turns out to be<br>
&gt;  a surprisingly useful mechanism. This article conducts a fairly<br>
&gt;  wide-ranging tour of such a feature...&quot;<br>
&gt;<br>
&gt; The paper is at:<br>
&gt;  <a href="http://www.ccs.neu.edu/home/shivers/papers/mrlc.pdf" target="_blank">http://www.ccs.neu.edu/home/shivers/papers/mrlc.pdf</a><br>
&gt;<br>
&gt; I&#39;m not aware of any published implementation of this feature. I wrote<br>
&gt; this version after looking at the language creation features in<br>
&gt; Racket. I was wondering how Racket might host languages with features<br>
&gt; that weren&#39;t supported by its primitives and multi came to mind, but<br>
&gt; after reading through the Racket documentation on continuations, I<br>
&gt; began to think that it was possible to implement multi as a plain old<br>
&gt; macro with continuation marks and prompts.<br>
&gt;<br>
&gt; My syntax has minor differences from the paper. Return points are<br>
&gt; indexed from ZERO, not one, since that is how vectors (etc.) are<br>
&gt; indexed in Scheme. Also, the indexed return point syntax isn&#39;t<br>
&gt; prefixed with #, and the lambda return point syntax doesn&#39;t have a<br>
&gt; lambda keyword.<br>
&gt;<br>
&gt; Look through test.rkt for a bunch of examples.<br>
&gt;<br>
&gt; ISSUES:<br>
&gt;<br>
&gt; I&#39;d like to hear from someone who knows Racket really well to tell me<br>
&gt; if I&#39;m barking up the wrong tree. Is there a better way to provide<br>
&gt; multi? Is what I have done reasonable?<br>
&gt;<br>
&gt; The macros could be better, and give better messages, etc. Please send<br>
&gt; a patch if you are good at that sort of thing.<br>
&gt;<br>
&gt; The multi macro would need to be improved to capture the super tail<br>
&gt; call semantics:<br>
&gt;  * A prompt should only be used when introducing lambda return points.<br>
&gt;  * Unused prompts could be popped off the &quot;stack&quot; before setting<br>
&gt;    up new return points.<br>
&gt;<br>
&gt; --<br>
&gt; Anthony Carrico<br>
&gt;<br>
&gt;<br>
&gt; ____________________<br>
&gt;  Racket Users list:<br>
&gt;  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt; ____________________<br>
&gt;  Racket Users list:<br>
&gt;  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br>
<br>
<br>
--<br>
sam th<br>
<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a><br>
<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br>