D on next-gen consoles and for game development

Steven Schveighoffer schveiguy at yahoo.com
Tue May 28 06:33:38 PDT 2013


On Sat, 25 May 2013 01:52:10 -0400, Manu <turkeyman at gmail.com> wrote:

> What does ObjC do? It seems to work okay on embedded hardware (although  
> not
> particularly memory-constrained hardware).
> Didn't ObjC recently reject GC in favour of refcounting?

Having used ObjC for the last year or so working on iOS, it is a very nice  
memory management model.

Essentially, all objects (and only objects) are ref-counted automatically  
by the compiler.  In code, whenever you assign or pass a pointer to an  
object, the compiler automatically inserts retains and releases extremely  
conservatively.

Then, the optimizer comes along and factors out extra retains and  
releases, if it can prove they are necessary.

What I really like about this is, unlike a library-based solution where  
every assignment to a 'smart pointer' incurs a release/retain, the  
compiler knows what this means and will factor them out, removing almost  
all of them.  It's as if you inserted the retains and releases in the most  
optimized way possible, and it's all for free.

Also, I believe the compiler is then free to reorder retains and releases  
since it understands how they work.  Of course, a retain/release is an  
atomic operation, and requires memory barriers, so the CPU/cache cannot  
reorder, but the compiler still can.

I asked David Nadlinger at the conference whether we could leverage this  
power in LDC, since LLVM is the compiler back-end used by Apple, but he  
said all those optimization passes are in the Objective-C front-end.

It would be cool/useful to have compiler-native reference counting.  The  
only issue is, Objective-C is quite object-heavy, and it's statically  
checkable whether a pointer is an Object pointer or not.  In D, you would  
have to conservatively use retains/releases on every pointer, since any  
memory block could be ref-counted.  But just like Objective-C most of them  
could be factored out.  Add in that D has the shared-ness of the pointer  
built into the type system, and you may have something that is extremely  
effective.

-Steve


More information about the Digitalmars-d mailing list