Question about garbage collection specification

via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 15 09:37:30 PDT 2015


On Monday, 15 June 2015 at 16:16:28 UTC, Steven Schveighoffer 
wrote:
> How can the compiler POSSIBLY know whether a pointer points at 
> GC data in order to make it undefined behavior?

It doesn't need to, the undefined behaviour comes from the 
unfulfilled expectations of the GC. For example, a "sufficiently 
advanced GC" with enough knowledge of types, including of local 
vars, could by chance run just at the moment when the only 
instance of the address is stored in an int variable, and 
disregard that variable because it's not a pointer. It is of 
course unlikely that GCs will ever get as much knowledge about 
local variables, or even unnamed temporaries...

>
> I don't see any justification for any of these restrictions. 
> The "to allow maximum flexibility" justification needs more 
> explanation, what possible feature could you implement given 
> this restriction?
>
> It even allows using unions to do exactly the same thing. There 
> is just no way this cannot be allowed.

For unions, an advanced GC would know the type and would make 
sure to treat them conservatively. The restrictions are for the 
other cases where the types are references. The GC needs to rely 
on them being pointer if it wants to move them, for example.

But I think you are right that the current restrictions are too 
strong. After some thoughts, I can't really see any realistic 
problem with tagged pointers.


More information about the Digitalmars-d mailing list