Dan Sugalski wrote:
At 4:41 PM +0200 9/8/04, Leopold Toetsch wrote:

No. As layed out my scheme doesn't need any register backing stacks.

If you're cloning the context every time someone pushes a register frame... that's a bit excessive.

There are no register stacks, no register stack opcodes, nada.

... If you're tossing the backing stacks, that's not an option.

Why? They are only used to preserve registers over function calls, which is done differently in my scheme.


Err. Ehem. We already switched to an one-frame-per-chunk scheme.

Which is swell, but this stuff tends to change every few months.

Yes. No. The last discussion in March WRT continuations had that result. No changes every few month. It was your decision :)


COWed stacks wouldn't help, AFAIK, anyway. The problem is the invalid context the continuation is holding.

Nonsense. If the continuation's got a hold of a chunk of the backing stacks then those stacks aren't invalid, chunks should get reclaimed by the DOD, and shouldn't get reused until they've been reclaimed.

Yep. That's the theory. We had that, when the one-frame-per-chunk stacks got introduced. The right thing to do is:


#define DISABLE_RETC_RECYCLING 1

which also properly collects stack frames then.

*But* this drops function calling speed by a factor of three, or it makes it about 6 times slower then Python[1]. In the presence of one Continuation created somewhere, we'd have to pay that price.

That makes the interpreter unbearable slow and non-competitive. That's the reason for my alternate calling scheme proposal.

BTW you didn't comment, why it's a no-go.

leo

[1] examples/benchmarks/fib.imc, estimated a bit because I timed it with a debug build.



Reply via email to