develooper Front page | perl.perl6.internals | Postings from November 2004

Re: Continuations, basic blocks, loops and register allocation

Thread Previous | Thread Next
Dan Sugalski
November 16, 2004 12:56
Re: Continuations, basic blocks, loops and register allocation
Message ID:
At 3:39 PM -0500 11/16/04, Matt Fowles wrote:
>On Tue, 16 Nov 2004 15:25:24 -0500, Dan Sugalski <> wrote:
>>  At 3:12 PM -0500 11/16/04, Matt Fowles wrote:
>>  >Dan~
>>  >
>>  >On Tue, 16 Nov 2004 13:41:25 -0500, Dan Sugalski <> wrote:
>>  >>  At 10:32 AM -0800 11/16/04, Jeff Clites wrote:
>>  >>  >The continuation preserves the frame (the mapping from logical
>>  >>  >variables to their values), but not the values of those variables at
>>  >>  >the time the continuation was created.
>>  >>
>>  >>  This is one of the fundamental properties of continuations, but it
>>  >>  does throw people. And it's why register contents have to be thrown
>>  >>  away when a continuation is invoked, since the registers have values,
>>  >>  and continuations don't preserve values.
>>  >
>>  >I think right here we have the crux of my failure to understand.  I
>>  >was/am under the impression that the continuation will restore the
>>  >register frame to exactly as it was when the continuation was taken.
>>  >Thus those registers which are values (I,N) will continue to have the
>>  >value they had when the continuation was taken, while those registers
>>  >which are pointers/references (S, P) will still point to the same
>>  >place, but that data may have changed.  Is this correct?
>>  No. The registers are just about the only thing that *isn't* restored.
>>  Continuations put the environment back. This includes things like the
>>  lexical pad stack, the namespace stack, the stack itself, any
>>  security credentials... basically everything that describes the
>>  environment. *Data*, on the other hand, is *not* restored. Data stays
>>  as it is.
>>  Registers are a special case of data, and they're just declared crud
>>  by fiat, since otherwise things get nasty and unpredictable.
>Then I am not sure what you mean by "The return continuation PMC type,
>used to create return continuations used for call/return style
>programming, guarantees that registers 16-31 will be set such that the
>contents of those registers are identical to the content of the
>registers when the return continuation was I<created>."
>I read that as saying that registers will be restored by
>continuations.  If that is not what it is intended to mean, could you
>clarify for me.

Return continuations are special, basically. There are a number of 
specialized continuation forms, and this is one of 'em. Which makes 
things a bit more confusing but, well, there you go.

--------------------------------------it's like this-------------------
Dan Sugalski                          even samurai                         have teddy bears and even
                                       teddy bears get drunk

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About