D on next-gen consoles and for game development

Rainer Schuetze r.sagitario at gmx.de
Wed May 29 00:18:45 PDT 2013



On 29.05.2013 02:46, Steven Schveighoffer wrote:
> On Tue, 28 May 2013 20:40:03 -0400, Manu <turkeyman at gmail.com> wrote:
>
>
>> ObjC and WinRT are both used successfully on embedded hardware, I'm
>> really
>> wondering if this is the way to go for embedded in D.
>> V8 uses an incremental collector (somehow?), which I've been saying is
>> basically mandatory for embedded/realtime use. Apparently Google agree.
>> Clearly others have already had this quarrel, their resolutions are worth
>> consideration.
>
> An interesting thing to note, Apple tried garbage collection with Obj-C,
> but only on MacOS, and it's now been deprecated since automatic
> reference counting was introduced [1].  It never was on iOS.
>
> So that is a telling omission I think.
>
> -Steve
>
> [1] https://en.wikipedia.org/wiki/Objective-C#Garbage_collection

Please note that you have to deal with circular references manually in 
Objective-C, introducing two types of pointers, strong and weak. I don't 
think this is optimal. If you want to deal with circular references 
automatically you again need some other kind of other garbage collection 
running.

A problem with the naive approach of atomic reference counting a counter 
inside the object (as usually done in COM interfaces, I don't know how 
it is done in Objective-C) is that it is not thread-safe to modify a 
pointer without locking (or a CAS2 operation that you don't have on 
popular processors). You can avoid that using deferred reference 
counting (logging pointer changes to some thread local buffer), but that 
introduces back a garbage collection step with possibly massive 
destruction. This step might be done concurrently, but that adds another 
layer of complexity to finding circles.

Another issue might be that incrementing a reference of an object when 
taking an interior pointer (like you do when using slices) can be pretty 
expensive because you usually have to find the base of the object to 
access the counter.

I won't dismiss RC garbage collection as impossible, but doing it 
efficiently and concurrently is not so easy.


More information about the Digitalmars-d mailing list