Carmack about static analysis

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Dec 25 20:23:06 PST 2011


On 12/25/11 8:56 PM, deadalnix wrote:
> Le 25/12/2011 05:27, Andrei Alexandrescu a écrit :
>> Got the GC book this morning, already read 2.5 chapters :o).
>>
>>
>> Andrei
>>
>
> You'll find that you can do a lot when GC is aware of immutability (in
> functionnal languages, most things tends to be immutable).
>
> In the actual state of druntime, the GC is bad, but worse, cannot be
> imporoved to take advantage of this, and never will unless a major
> changement is done in GC interface.

What changes do you have in mind?

I've gone through a larger portion of the book and one thing has become 
very clear to me: we must improve the precision of the collector. This 
would be a gating feature towards taking the GC pretty much anywhere.

As a first step, we must make all allocations except stack type-aware, 
and leave only the stack to be imprecise.

A tactical detail of the above has become equally clear to me - we MUST 
use D's reflection and introspection capabilities in increasing the 
precision of the collector.

It's fairly easy to write a generic function mark() (as in the "mark" 
stage of the mark/sweep collector) that accepts any object type with 
indirections (class, array, associative array, pointer to struct). The 
function marks the pointer and then iterates through all fields of the 
object and recurses to itself to mark other reference/pointer/etc fields 
of the object.

This one generic function obviates a lot of the code necessary today for 
conservatively marking pointers, and also reduces and simplifies 
enormously the new code that would otherwise be needed in order to 
define precise collection.

Pointers to instances of that generic functions would be accessible from 
each allocated block; to transitively mark the block, the function is 
called via pointer.

Essentially instances of that function (which I estimate to a 50-liner) 
would take care of mark() for the entire universe of D types - a 
humongous success of compile-time reflection.


Andrei


More information about the Digitalmars-d mailing list