On Tuesday, 13 September 2016 at 11:59:46 UTC, Shachar Shemesh wrote:
On 13/09/16 02:21, deadalnix wrote:

RC itself is not panacea, it doesn't work well with exceptions, generate
a huge amount of code bloat,

I will need explanation to those two. Assuming we have RAII, why doesn't RC work well with exceptions?


With RC, the runtime needs to resume every frames. That makes exception very slow. Plus you need to generate a bunch of unwinding code + LSDA infos, and it clusters like crazy when you have destructor that can throw.

This is why ObjC exeption handling and ARC never worked well together. This is why C++ exception are dog slow and this is why Swift is nothrow by default.

But first and foremost, it is a disaster for shared data.

Again, please elaborate.


For shared data, you need synchronized reference counting, which is prohibitively expensive.

Here's my worries about the hybrid approach. The GC run time is proportional not to the amount of memory you manage with the GC, but to the amount of memory that might hold a pointer to a GC managed memory. In other words, if most of my memory is RC managed, but some of it is GC, I pay the price of both memory manager on most of my memory.

Shachar

No you don't, as how often the GC kicks in depend of the rate at which you produce garbage, which is going to be very low with an hybrid approach.

Reply via email to