Dan~

On Tue, 30 Nov 2004 08:28:35 -0500, Dan Sugalski <[EMAIL PROTECTED]> wrote:
> At 1:45 AM -0800 11/29/04, Jeff Clites wrote:
> 
> 
> >On Nov 28, 2004, at 2:48 AM, Piers Cawley wrote:
> >
> >>I just thought of a heuristic that might help with register
> >>preservation:
> >>
> >>A variable/register should be preserved over a function call if either of 
> >>the
> >>following is true:
> >>
> >>1. The variable is referred to again (lexically) after the function has
> >>    returned.
> >>2. The variable is used as the argument of a function call within the
> >>    current compilation unit.
> >
> >That doesn't solve it, though you'd think it would. Here's the
> >counter-example:
> >
> >       x = 1
> >       foo()
> >       print x
> >       y = 2
> >       return y
> >
> >You'd think that x and y could use the same memory location
> >(register, variable--whatever), since ostensibly their lifetimes
> >don't overlap. But continuation re-invocation can cause foo() to
> >return multiple times, and each time it should print "1", but it
> >won't if x and y use the same "slot" (it would print "2" each time
> >after the first). In truth, their lifetimes do overlap, due to the
> >hidden (potential) loops created by continuations.
> 
> Except... we've already declared that return continuations are
> special, and preserve the registers in the 16-31 range. So when we
> return from foo, regardless of how or how many times, the pointer to
> x's PMC will be in a register if it was in there before the call to
> foo, if it's in the preserved range. So in this case there's no
> problem. Things'll look like:
> 
>        x = 1 # new P16, .Integer; P16 = 1 # P16 has pointer value 0x04
>        foo() # foo invocation
>        print x # P16 still has pointer value 0x04
>        y = 2 # new P16, .Integer; P16 = 2 # P16 now has pointer value 0x08
>        return y # Passes back 0x08
> 
> With more or less clarity.

I think that the concern is for the circumstance where foo() promotes
it return continuation to a full continuation.  Then, that guarantee
is no longer provided (I think), and repeated invocation could leave y
in P16 rather than x.

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

Reply via email to