D 2015/2016 Vision?

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Thu Oct 8 07:13:27 PDT 2015


On Thursday, 8 October 2015 at 12:10:24 UTC, Ola Fosheim Grøstad 
wrote:
> On Thursday, 8 October 2015 at 11:31:49 UTC, Kagamin wrote:
>> cyclic graph. If you must manually verify the graph and put 
>> weak references appropriately - what kind of design in that?
>
> It's a system programming language design... If you plan your 
> model before coding it is rather easy to detect cycles in the 
> model. Make the primary data structure a directed acyclic 
> graph, then add back pointers as weak_ptr for secondary 
> relations.

I've programmed extensively in C++ with smart pointers, and in my 
experience, circular references are rarely a problem. There are 
some cases where it's obvious that you have one (e.g. where one 
object owns another and they need to talk to each other), in 
which case you either use a normal pointer or a weak reference, 
depending on which makes more sense. And in the cases that you 
don't catch, you find them in testing, figure out what should be 
a weak reference to get rid of the circular dependency, you fix 
it, and you move on. It really isn't a big deal in general, 
though I suppose that there could be certain ways of designing 
programs where it would be more problematic.

One advantage of using smart pointers with a GC is that the GC 
can then clean up circular references, and you don't necessarily 
even need weak pointers (though there are bound to be cases where 
they'd still be desirable). But the GC isn't required to solve 
the problem. It just makes it so that if you do end up with a 
circular reference problem, it'll fix itself.

- Jonathan M Davis


More information about the Digitalmars-d mailing list