[racket] Multi-return Function Call

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Tue Feb 21 09:52:22 EST 2012

It seems possible to check that, no?

Robby

On Tue, Feb 21, 2012 at 8:50 AM, David Fisher <dave at casadefisher.com> wrote:
> 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 <ianj at 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" <samth at ccs.neu.edu>
>> To: "J. Ian Johnson" <ianj at ccs.neu.edu>
>> Cc: "Anthony Carrico" <acarrico at memebeam.org>, users at 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 <ianj at 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" <acarrico at memebeam.org>
>> > To: users at 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 <acarrico at 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
>> samth at ccs.neu.edu
>>
>> ____________________
>>  Racket Users list:
>>  http://lists.racket-lang.org/users
>
>
>
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users
>


Posted on the users mailing list.