Chaim Frenkel wrote:
> >>>>> "DS" == Dan Sugalski <[EMAIL PROTECTED]> writes:
> DS> Most of what gets flag-checked now will probably do this, yes.
> 
> >> And why waste the GC data. I suspect that most variables will not be shared.
> 
> DS> Doesn't matter whether they're shared. Mark & sweep, generational, and
> DS> refcount garbage collection all need workspace.
> 
> Typo. I meant sync data.

I don't think we need a whole word devoted to GC data either. Mark-sweep
doesn't need any additional space because we can just use the bottom bit of
a pointer. Generational needs extra space, but not on each value -- it uses
the "unused" space in the heap. Ref count needs the most extra space, but a
whole word is way too much.

> The addition of sync into each and every SV is an overhead for code
> not using it. I think it might be possible to handle the locking with
> a wrapper object. So each shared whatzit has a locking proxy.

Great idea -- transparent refs. It's going to cost a double dispatch for
shared data, but IMHO that's better than sucking up an extra word for
every un-shared value. (How much does lock acquisition cost anyway? Would
an extra deref be very noticable?)

- Ken

Reply via email to