I looked through google groups and couldn't find leo's solution
("putting lexicals in registers", and I can't figure out what that
means; couldn't you have a loop counter that isn't a lexical?).

I think we all agree that this is a major problem, and that to ignore it
would be a fatal mistake in Parrot's support of continuations.  And
parrot not supporting continuations means parrot not supporting
coroutines.  And that means parrot not supporting Perl 6 :-/

We would like a solution that allows optimization, keeps JIT around, and
behaves correctly.  The main problem with "Dan's solution" (which I also
couldn't find, but I'm inferring by talk about it) is that it restores
things values when they may have already changed.

So--here's the naive proposal.  Naive because I'm not very good at
foreseeing performance issues, etc.  Keep in mind that this is a
major architecture change (which we're not doing, right?), but can be
made opaque with proper support from IMCC.

No more value semantics.

That's it.  All values on the bytecode level are pointers.  I's are
pointers to ints (that's still a win since you don't need to keep going
through a vtable), etc.  P's are just as they used to be.

Then to use an int, you have to allocate it first.  Perhaps this can be
made efficient with a specialized small-object pool attached onto the
register frame for cache locality (which I don't really understand).

Anyway, I'm expecting you smart guys to shoot this down.  But
something's got to be done about this problem.  Proposals have to
happen.

Luke

Reply via email to