DIP60: @nogc attribute

via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 18 04:58:06 PDT 2014


On Friday, 18 April 2014 at 10:06:35 UTC, Manu via Digitalmars-d 
wrote:
> D pointers are thread-local by default, you need to mark things 
> 'shared'
> explicitly if they are to be passed between threads. This is 
> one of the
> great advantages D has over C/C++/Obj-C.

TLS sucks, as you get extra indirections if it isn't implemented 
using a MMU (typically not because the extra page tables would 
cost too much?). Besides, when I want globals it is for database 
like structures so I usually want them shared anyway.

There is a reason for why Rust only uses ARC for immutable data. 
But that could  be so useful that it might be worth it. E.g. for 
caches.

For efficient ARC I think you would need the equivalent of 
isolated threads and forbid pointers to internal data so that you 
can maintain ref-counting at the start of the object. Oth

Weak references is still an issue though. It takes extra effort. 
You either need a separate object, or you need a list of weak 
references to clear, or you will have to "realloc" the object 
(freeing the datasegment, but keeping the refcounting head, 
causing memory fragmentation), or some other "ugly" scheme. So 
you want whole program analysis to figure out for which objects 
you don't have to deal with weak references…

Ola.




More information about the Digitalmars-d mailing list