DIP60: @nogc attribute

via Digitalmars-d digitalmars-d at puremagic.com
Mon Apr 21 23:51:37 PDT 2014


On Monday, 21 April 2014 at 23:02:54 UTC, Walter Bright wrote:
> There is JUST NO WAY that:
>
>     struct RefCount {
>         T* data;
>         int* count;
>     }
>

This is actually quite efficient compared to the standard 
NSObject which uses a hashtable for refcounting:

http://www.opensource.apple.com/source/objc4/objc4-551.1/runtime/NSObject.mm
http://www.opensource.apple.com/source/objc4/objc4-551.1/runtime/llvm-DenseMap.h

This is how Core Foundation does it:

http://www.opensource.apple.com/source/CF/CF-855.11/CFRuntime.c

Pretty longwinded:

CFTypeRef CFRetain(CFTypeRef cf) {
     if (NULL == cf) { CRSetCrashLogMessage("*** CFRetain() called 
with NULL ***"); HALT; }
     if (cf) __CFGenericAssertIsCF(cf);
     return _CFRetain(cf, false);
}

static CFTypeRef _CFRetain(CFTypeRef cf, Boolean tryR) {
     uint32_t cfinfo = *(uint32_t *)&(((CFRuntimeBase 
*)cf)->_cfinfo);
     if (cfinfo & 0x800000) { // custom ref counting for object
         ...stuff deleted…
         refcount(+1, cf);
         return cf;
     }
     …lots of stuff deleted…
     return cf;
}


More information about the Digitalmars-d mailing list