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.
Dave On Tue, Feb 21, 2012 at 9:32 AM, J. Ian Johnson <i...@ccs.neu.edu> wrote: > Perhaps I remembered wrong about interpretation, but I do know he said > that he didn't have a good implementation story - he must not have been > very satisfied with that journal article. > > -Ian > ----- Original Message ----- > From: "Sam Tobin-Hochstadt" <sa...@ccs.neu.edu> > To: "J. Ian Johnson" <i...@ccs.neu.edu> > Cc: "Anthony Carrico" <acarr...@memebeam.org>, users@racket-lang.org > Sent: Tuesday, February 21, 2012 8:45:06 AM GMT -05:00 US/Canada Eastern > Subject: Re: [racket] Multi-return Function Call > > That seems very surprising, since the journal paper (JFP 2006) about > MRLC talks a lot about implementation strategies, and includes > performance measurements for a compiler that implements MRLC. > > I think Anthony's implementation resembles the implementation in terms > of exceptions discussed in section 11.1 of that paper. > > On Tue, Feb 21, 2012 at 8:15 AM, J. Ian Johnson <i...@ccs.neu.edu> wrote: > > I don't have the time right now to go through your implementation, but I > will say that I'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. > > > > -Ian > > ----- Original Message ----- > > From: "Anthony Carrico" <acarr...@memebeam.org> > > To: users@racket-lang.org > > Sent: Monday, February 20, 2012 8:21:06 PM GMT -05:00 US/Canada Eastern > > Subject: [racket] Multi-return Function Call > > > > It is only 60 LOC, so go ahead and take a look: > > https://github.com/acarrico/multi > > > > README: > > > > AUTHOR: Anthony Carrico <acarr...@memebeam.org> > > > > This is an implementation of Olin Shivers'/David Fisher's > > "Multi-return Function Call". I'll quote from the abstract of their > > paper: > > > > "It is possible to extend the basic notion of 'function call' to > > allow functions to have multiple return points. This turns out to be > > a surprisingly useful mechanism. This article conducts a fairly > > wide-ranging tour of such a feature..." > > > > The paper is at: > > http://www.ccs.neu.edu/home/shivers/papers/mrlc.pdf > > > > I'm not aware of any published implementation of this feature. I wrote > > this version after looking at the language creation features in > > Racket. I was wondering how Racket might host languages with features > > that weren't supported by its primitives and multi came to mind, but > > after reading through the Racket documentation on continuations, I > > began to think that it was possible to implement multi as a plain old > > macro with continuation marks and prompts. > > > > My syntax has minor differences from the paper. Return points are > > indexed from ZERO, not one, since that is how vectors (etc.) are > > indexed in Scheme. Also, the indexed return point syntax isn't > > prefixed with #, and the lambda return point syntax doesn't have a > > lambda keyword. > > > > Look through test.rkt for a bunch of examples. > > > > ISSUES: > > > > I'd like to hear from someone who knows Racket really well to tell me > > if I'm barking up the wrong tree. Is there a better way to provide > > multi? Is what I have done reasonable? > > > > The macros could be better, and give better messages, etc. Please send > > a patch if you are good at that sort of thing. > > > > The multi macro would need to be improved to capture the super tail > > call semantics: > > * A prompt should only be used when introducing lambda return points. > > * Unused prompts could be popped off the "stack" before setting > > up new return points. > > > > -- > > Anthony Carrico > > > > > > ____________________ > > Racket Users list: > > http://lists.racket-lang.org/users > > ____________________ > > Racket Users list: > > http://lists.racket-lang.org/users > > > > -- > sam th > sa...@ccs.neu.edu > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users >
____________________ Racket Users list: http://lists.racket-lang.org/users