Shared keyword and the GC?

Alex Rønne Petersen alex at lycus.org
Fri Oct 19 02:18:40 PDT 2012


On 19-10-2012 11:07, sclytrack wrote:
>
>> How does it deal with the problem where a pointer in TLS points to
>> global data,
>
> Need to run stop-the-world for shared heap. But it would be interesting
> to have blocks that have no shared pointers in them.

The problem with D is that we have a (more or less) stable language that 
we can't make major changes to at this point.

>
>
>> or worse yet, a pointer in the global heap points to TLS?
>>
>
> Could you give an example?

I don't know Objective-C, so in D:

void* p; // in TLS

void main()
{
     p = GC.malloc(1024); // a pointer to the global heap is now in TLS
}

Or the more complicated case (for any arbitrary graph of objects):

Object p; // in TLS

class C
{
     Object o;

     this(Object o)
     {
         this.o = o;
     }
}

void main()
{
     p = new C(new Object); // the graph can be arbitrarily complex and 
any part of it can be allocated with the GC, malloc, or any other mechanism
}

>
>> I'm pretty sure it can't without doing a full pass over the entire
>> heap, which seems to me like it defeats the purpose.
>
> Yeah.

Thread-local GC is all about improving scalability by only stopping 
threads that need to be stopped. If you can't even do that, then any 
effort towards thread-local GC is quite pointless IMO.

>
>>
>> But I may just be missing out on some restriction (type system or
>> whatever) Objective-C has that makes it feasible.
>
>


-- 
Alex Rønne Petersen
alex at lycus.org
http://lycus.org


More information about the Digitalmars-d mailing list