At 3:12 PM -0500 11/16/04, Matt Fowles wrote:
Dan~

On Tue, 16 Nov 2004 13:41:25 -0500, Dan Sugalski <[EMAIL PROTECTED]> 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.
--
Dan


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

Reply via email to