GC API: What can change for precise scanning?

Alex Rønne Petersen xtzgzorex at gmail.com
Wed Apr 18 03:23:26 PDT 2012


On 18-04-2012 02:36, dsimcha wrote:
> Now that the compiler infrastructure has been implemented, I've gotten
> busy figuring out how to make D's default GC precise. As a first
> attempt, I think I'm going to adapt my original solution from
> http://d.puremagic.com/issues/show_bug.cgi?id=3463 since it's simple and
> it works except that there previously was no clean way to get the offset
> info into the GC. As Walter pointed out in another thread, the GCInfo
> template is allowed to instantiate to data instead of a function. IMHO
> unless/until major architectural changes to the GC are made that require
> a function pointer, there's no point in adding this indirection.
>
> I started working on this and I ran into a roadblock. I need to know
> what parts of the GC API are allowed to change, and discuss how to
> abstract away the implementation of it from the GC API. I assume the
> stuff in core.memory needs to stay mostly the same, though I guess we
> would need to add a setType() function that takes a pointer into a block
> of memory and a TypeInfo object and changes how the GC interprets the
> bits in the block.
>
> In gc.d, we define a bunch of extern(C) functions and the proxy thing.
> Since we've given up on the idea of swapping precise GCs at link time,
> can I just rip out all this unnecesary indirection? If not, is it ok to
> change some of these signatures? I definitely want to avoid allocating
> (requiring the GC lock) and then calling a function to set the type
> (requiring another lock acquisition) so the signature of malloc(), etc.
> needs to change somewhere.
>
> More generally, what is the intended way to get GCInfo pointers from
> TypeInfo into the guts of the GC where they can be acted on?

This is not specifically an answer to your question, but my opinion on 
this subject is that altering the GC API without a deprecation process 
or similar is fine. This is a core component of the runtime, and I don't 
think expecting a stable API for something like a garbage collector of 
all things is reasonable in the first place.

That said, I do think functionality has to be maintained. That is, if 
the GC can do something in a previous version, it should be able to do 
it in the subsequent version too. *How* that something is achieved in 
the subsequent version isn't so important, as long as the functionality 
is *there* in some way.

-- 
- Alex


More information about the Digitalmars-d mailing list