[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[sc-dev] idea of how to implement a weak array
Reading about garbage collecting, I had an idea how a weak array
could be implemented in sc. I might be totally wrong, and this is
speculative.
An array that has been marked weak should behave as if it could not
contain pointers (i.e. it is not scanned any further by marking it
black instead of grey). When the memory of an object that it points
to is reused, the array will point to some weird unpredictable data.
The only thing that we can be reasonably sure is that the data will
be different from the original object.
Now the weak array could be encapsuled in an object that keeps a
normal list of copies of all objects in the weak array. When trying
to access an object, it would compare the data at the two locations
and if they are not equal, return nil and remove also the copied
object from the second list (which is then garbage collected).
This would fail in the (improbable?) case that an equal object is
stored at the same memory address again.
--
.