Would you pay for GC?

Ola Fosheim Grøstad ola.fosheim.grostad at gmail.com
Tue Jan 25 11:47:26 UTC 2022


On Tuesday, 25 January 2022 at 10:56:50 UTC, Paulo Pinto wrote:
> Pity that programmer knowledge can't do much to ABI 
> requirements.

C++ has an ABI?


> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1116r0.pdf

So this is basically about giving a shared_ptr the semantics of a 
unique_ptr.

That is not required for what we are talking about here.


> Also that trick only works in single developer code bases, good 
> luck not introducing a memory corruption some months/years down 
> the line.

No, this is not a big issue if you create proper ADTs. The issue 
is that it is very difficult for a compiler to distinguish 
between objects that "wrap ownership" around a data-structure and 
nodes within a datastructure; in particular what happens to 
ownership when those nodes are rearranged.

However, the programmer should have good and solid knowledge 
about this, so you only need to increment on the root-object if 
you know that nodes do not escape below a point in the call tree. 
(And you might be able to wrap this in a reference-type specific 
to the ADT).

Anyway, in C++ you tend almost always to use unique_ptr, 
shared_ptr is the exception.  So you usually have very few 
shared_ptrs and therefore they are not all that hard to reason 
about.

For a language like D you could have ARC + borrow checker + the 
ability to constrain ARC-pointers (to get a unique_ptr) for 
shared objects and something GC-like for objects local to 
actors/tasks.




More information about the Digitalmars-d mailing list