d future or plans for d3

Timon Gehr timon.gehr at gmx.ch
Mon Dec 19 02:26:08 PST 2011


On 12/19/2011 05:23 AM, a wrote:
>
>> In case of passing GC memory to C functions, I would prefer to just
>> disallow the C code to capture the reference, and to disable GC while
>> the C function runs.
>
> Wouldn't this be a problem with non concurrent GC? If you have multiple threads that spend most of the time in C function calls (for example performing IO), garbage collection would be impossible most of the time. In the extreme case garbage would never be collected.
>

Garbage collection is triggered by allocations. The C function does not 
perform GC allocations. While the memory is allocated, the GC is 
enabled. With non-concurrent GC there is certainly no issue, but the GC 
would have to be disabled and re-enabled on by thread basis.

> Couldn't we just require that the programmer keeps a reference to the memory passed to C in a D variable? AFAIK python does it that way, but
> I don't use python enough to know if it causes serious problems there.
>

The issue is that a copying GC must be able to move the memory. It 
cannot do that if there are references it does not know about, because 
it has to update all references to the moved memory. If you just keep 
around a reference to the memory, your reference will be updated, but 
the reference from the C code will be left dangling.


More information about the Digitalmars-d mailing list