Leopold Toetsch <[EMAIL PROTECTED]> writes:

> Dan Sugalski <[EMAIL PROTECTED]> wrote:
>> At 10:38 PM +0100 3/18/04, Leopold Toetsch wrote:
>>>
>>>Which brings up again my warnocked question: How can return
>>>continuations get reused?
>
>> Works like this. (No pasm, but it should be obvious)
>
> Ok. First (and that applies to Jens example too), I'd like to outline
> continuation vs return continuation and its usage:
>
> 1) First there was only a Continuation PMC. Performance with CPS sucked.
> So I did invent a RetContinuation PMC Performance sucked less. The
> difference between these two is: the former has COW copied stacks inside
> its context, the latter has only pointers of the stacks in its context.
>
> 2) A return continuation is automatically created by
>
>   invokecc
>   callmethodcc
>
> It's totally hidden when using PIR function or method call syntax
>
>   _func(a, b)
>   obj."meth"(args)
>
> These internally create above opcodes and create a new return
> continuation on each sub or method invocation
>
> 3) Returning from the sub or method in PIR syntax again totally hides
> the return continuation
>
>   .pcc_begin_return
>   .return result
>   .pcc_end_return
>   .end
>
> or just
>
>   .sub _foo
>   .end            # automatic return sequence inserted.
>
> 4) From PIR level there is no official way to even reference this return
> continuation - its invisible.
>
> 5) *But*
>
>> If a continuation's taken from within a sub somewhere, return
>> continuations may (probably will) be used multiple times, once for
>> the original return then once for each time the continuation is
>> invoked.
>
> 6) Yes, that's true. So the questios is: Can we invent some HLL PIR
> syntax that clearly indicates: this subroutine will return multiple
> times through the same return continuation. We have already a similar
> construct for Coroutines:
>
>   .pcc_begin_yield
>   .result  # optional
>   .pcc_end_yield
>
> This is invokeing the coroutine and returns to the caller.
>
> What's the usage of Continuations from HLLs point of view? Can we get
> some hints, what is intended?
>
> I'd like to have, if possible a clear indication: that's a plain
> function or method call and this is not. I think the possible speedup is
> worth the effort.

I think that requires solving the halting problem.

Reply via email to