On Sat, 25 May 2013 01:52:10 -0400, Manu <turkey...@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

Reply via email to