Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Every design decision has tradeoffs. RC has its own significant upsides, like deterministic deallocation and a much lower memory floor for preventing world-pauses during tracing.


And possible stack overflow or freezing applications, when a domino effect of reference counting reaching 0 happens, and dealloc functions weren't properly written.

There is a Herb Sutter talk at CppCon about the downsides of reference counting.

Basically the solution to those problems is to make use of hazardous pointers or deferred destructions on background threads, which are a kind of lightweight tracing GC.


How is RC deallocation deterministic?

Besides which I don't want to have to keep track of weak references, at that point I would rather just have a full ownership model: https://github.com/apple/swift/blob/main/docs/OwnershipManif...


I assume the grandparent was talking about how, as soon as the last reference to a refcounted object goes away, the object is deallocated. Pure Swift follows this rule though Objective-C code may not always do this due to things like autorelease pools.


Sure but that's nothing like deterministic destruction, where I can tell you the order that things will be deallocated just from looking at a block.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: