[M3devel] GC question

Darko darko at darko.org
Tue Jan 15 01:39:23 CET 2008


Yes, I was considering that and other options, I was just hoping to  
move the complexity to the compiler, where I thought it might already  
be implemented. I have to try keep my code very clean and simple.


On 14/01/2008, at 3:09 PM, Tony Hosking wrote:

>
> On Jan 14, 2008, at 4:28 PM, Darko wrote:
>
>> Yep, I want to replace one object with another. One application is  
>> to expand open arrays without searching large data structures for  
>> references to replace. Maybe a simpler question is can you increase  
>> the size of an allocated object without getting messy?
>
> Not easily.
>
> Old-time Smalltalk systems had an "Object become:" method that you  
> could use to reallocate in this way, but a level of indirection was  
> used to avoid having to scan the heap.  How about using an explicit  
> level of indirection of your own?  The WeakRef interface may be  
> useful to you here too, so that you can discard indirection state  
> when there are no other references to the object.
>
>>
>>
>> On 14/01/2008, at 1:17 PM, Tony Hosking wrote:
>>
>>> I'm not sure what your purpose here might be.  You shouldn't  
>>> assume anything about an object's precise location since the  
>>> collector is free to move it around.  What are you trying to do?   
>>> If you are trying to *replace* one object with another and have  
>>> all references to the old object refer to the new object, then,  
>>> yes, you really need to get intimately involved with the GC, since  
>>> it will need to go through the whole heap and redirect those  
>>> references.  It is doable, but messy, and probably requires that  
>>> all threads in the system be stopped while you pull off the  
>>> switch.  To do it without stopping all the threads requires that  
>>> you do something much smarter (see papers on replicating GC...).
>>>
>>> On Jan 14, 2008, at 3:53 PM, Mika Nystrom wrote:
>>>
>>>> It would have to be able to return an error, no?  If there's
>>>> an ambiguous root pointing to the object...
>>>>
>>>>
>>>> Darko writes:
>>>>> Tony,
>>>>>
>>>>> I imagine you're intimately familiar with the garbage collector
>>>>> implementation. If I wanted to implement a 'reallocate' function  
>>>>> that
>>>>> preserved references to an object although the object was  
>>>>> reallocated,
>>>>> ie change all existing references from the old object to the new
>>>>> object, would this be straight forward using the code of the  
>>>>> current
>>>>> GC implementation? Is there any existing function that might do
>>>>> something like this already?
>>>>>
>>>>> Thanks,
>>>>> Darko.
>>>
>




More information about the M3devel mailing list