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.