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

Re: Continuations, basic blocks, loops and register allocation

Thread Previous | Thread Next
Matt Fowles
November 16, 2004 12:39
Re: Continuations, basic blocks, loops and register allocation
Message ID:

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.

"Computer Science is merely the post-Turing Decline of Formal Systems Theory."

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