On Sun, Jun 12, 2005 at 03:40:55PM -0600, Curtis Rawls wrote:
> I also do not see the wisdom of reducing continuations to just a GOTO.
It really isn't just a goto, at least, not a hardware-CPU-style goto.
By virtue of Parrot's registers living in memory attached to the
activiation record, switching control to a saved activation record
automatically restores all the registers. Automagically, even.
I've talked this over extensively with Piers (on IRC), Autrijus, and
Leo, and I'm now convinced that switching to a saved activation
record, along with the register contents still in it, is enough.
Granted, the register allocator[*] will still need to learn that it
can't use any given register for incompatible purposes across
subroutine call boundaries (or across labels). But given the new
larger cheeze-its^Wregister frame, that's no problem.
> Continuations should have all the abilities of a function, with the
> additional abilities of returning its state, in the form of its
> activation record, and being reinvoked with said activation record.
> The activation record stores all info about the state of the function
> (saved registers, calling function, PC, etc). Maybe think of it as a
> snapshot of the function's state.
Quite. My "glorified goto" description neglected a key difference
between the Parrot VM and a real CPU: a goto in a real CPU does not
restore registers, while switching activation records in Parrot does.
[*] the PIR register allocator, that is, which may under certain
circumstances realize that $P30 and $P35 have disjoint lifetimes
and are never used across a function call, and therefore can be
assigned to the same actual P register (e.g. P20)
--
Chip Salzenberg <[EMAIL PROTECTED]>