On Friday, 12 September 2014 at 07:46:03 UTC, eles wrote:
On Thursday, 11 September 2014 at 19:56:17 UTC, Paulo Pinto wrote:
Am 11.09.2014 20:32, schrieb Daniel Alves:

It is incredible how Objective-C's ARC became a symbol for reference counting, instead of the living proof of Apple's failure to produce a working GC for Objective-C that didn't crash every couple of seconds.

I think I fail to grasp something here. For me, ARC is something that is managed at runtime: you have a counter on a chunk of memory and you increase it with each new reference towards that memory, then you decrement it when memory is released. In the end, when the counter reaches 0, you drop the chunk.

OTOH, code analysis and automatically inserting free/delete where the programmers would/should have done it is not really that. Is a compile-time approach and not different of manual memory management.

Which one is, in the end, the approach took by Apple, and which one is the "true" ARC?...

ARC was a term popularized by Apple when they introduced the said feature in Objective-C.

In the GC literature it is plain reference counting.

ARC in Objective-C is a mix of both approaches that you mention.

It only applies to Objective-C classes that follow the retain/release patterns since the NeXTStep days. For structs, malloc() or even classes that don't follow the Cooca patterns, only manual memory management is possible.

The compiler inserts the retain/release calls that a programmer would write manually, at the locations one would expect from the said patterns.

Then a second pass, via dataflow analysis, removes the pairs of retain/release that are superfluous, due to object lifetime inside a method/function block.

This way you get automatic reference counting, as long as those classes use the said patterns correctly. As a plus the code gets to interact with libraries that are clueless about ARC.

Now, having said this, when Apple introduced GC in Objective-C it was very fragile, only worked with Objective-C classes, was full of "take care of X when you do Y" and required all Frameworks on the project to have compatible build settings.

Of course, more often than not, the result was random crashes when using third party libraries, that Apple never sorted out.

So ARC in Objective-C ended up being a better solution, due to interoperability issues, and not just because RC is better than GC.

--
Paulo





Reply via email to