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