GC API: What can change for precise scanning?
Alex Rønne Petersen
xtzgzorex at gmail.com
Wed Apr 18 03:20:35 PDT 2012
On 18-04-2012 11:56, deadalnix wrote:
> Le 18/04/2012 02:36, dsimcha a écrit :
>> 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?
>
> I guess that the flag to indicate if some piece of memory may have
> pointer can go away.
+1. This is useless if we're going to use bitmaps or similar.
>
> I think you certainly can remove all indirection. Additionally, I wonder
> why most of theses functions are extern(C).
--
- Alex
More information about the Digitalmars-d
mailing list