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