Precise GC
Steven Schveighoffer
schveiguy at yahoo.com
Mon Apr 9 06:51:54 PDT 2012
On Sat, 07 Apr 2012 21:56:09 -0400, Walter Bright
<newshound2 at digitalmars.com> wrote:
> Of course, many of us have been thinking about this for a looong time,
> and what is the best way to go about it. The usual technique is for the
> compiler to emit some sort of table for each TypeInfo giving the layout
> of the object, i.e. where the pointers are.
>
> The general problem with these is the table is non-trivial, as it will
> require things like iterated data blocks, etc. It has to be compressed
> to save space, and the gc then has to execute a fair amount of code to
> decode it.
>
> It also requires some significant work on the compiler end, leading of
> course to complexity, rigidity, development bottlenecks, and the usual
> bugs.
>
> An alternative Andrei and I have been talking about is to put in the
> TypeInfo a pointer to a function. That function will contain customized
> code to mark the pointers in an instance of that type. That custom code
> will be generated by a template defined by the library. All the compiler
> has to do is stupidly instantiate the template for the type, and insert
> an address to the generated function.
>
> The compiler need know NOTHING about how the marking works.
>
> Even better, as ctRegex has demonstrated, the custom generated code can
> be very, very fast compared with a runtime table-driven approach. (The
> slow part will be calling the function indirectly.)
>
> And best of all, the design is pushed out of the compiler into the
> library, so various schemes can be tried out without needing compiler
> work.
>
> I think this is an exciting idea, it will enable us to get a precise gc
> by enabling people to work on it in parallel rather than serially
> waiting for me.
I think this is a really good idea.
I would like to go further and propose that there be an arbitrary way to
add members to the TypeInfo types using templates. Not sure how it would
be implemented, but I don't see why this has to be specific to GCs. Some
way to signify "hey compiler, please initialize this member with template
X given the type being compiled".
This could be a huge bridge between compile-time and runtime type
information.
-Steve
More information about the Digitalmars-d
mailing list