Maybe D is right about GC after all !

bachmeier no at spam.net
Wed Dec 20 01:30:47 UTC 2017


On Wednesday, 20 December 2017 at 00:38:58 UTC, Jonathan M Davis 
wrote:
> On Tuesday, December 19, 2017 23:53:04 bachmeier via 
> Digitalmars-d wrote:
>> On Tuesday, 19 December 2017 at 13:14:50 UTC, Mark wrote:
>> > What do you think of the following comment to that article?
>> >
>> > "In well-written modern C++, memory management errors are a 
>> > solved problem. You can just write code, and know that the 
>> > compiler and library will take care of cleaning up for you, 
>> > just like with a GC-based system, but with the added benefit 
>> > that it’s deterministic, and can handle non-memory resources 
>> > such as file handles and sockets too."
>>
>> I'm no C++ expert, but isn't that because of the use of unique 
>> pointers and shared pointers? And aren't shared pointers 
>> reference counted and stuck with the usual limitations 
>> associated with reference counting?
>
> What limitations are you concerned about? Certainly, shared_ptr 
> comes with whatever pros and cons come from non-intrusive (i.e. 
> not built into the object) reference-counting, but from I've 
> seen, there really isn't much of a downside to them 
> (_especially_ if you're comparing them to manual memory 
> management). Mostly, you just have to worry about using 
> weak_ptr when you'd otherwise have a circular reference. Sure, 
> using the GC is easier but not by much. In my experience, you 
> can generally just use shared_ptr and not worry much about 
> memory management, and you get mostly deterministic 
> destruction, unlike the GC (it's mostly, because there are 
> times when stuff sticks around a lot longer than you might 
> expect, because something has a reference to it, which isn't 
> always obvious; it's still technically determinstic, but the 
> effect can seem pretty non-deterministic sometimes). There are 
> plenty of C++ programmers who have no problem with shared_ptr 
> who would feel quite leery about using the GC, and for some 
> stuff, the determinism of reference counting can be critical. 
> With a GC, you can mostly not worry about such things, but 
> occasionally, you have to be careful, or you'll have problems 
> with resource management because on the non-determinism (e.g. 
> you really don't want sockets to closed based on when the GC 
> collects the socket object). And whether RC or GC is better for 
> performance depends heavily on what you're doing. RC tends to 
> slow everything down slightly but usually doesn't have bursts 
> of memory collection (though it can when you free a large tree 
> of objects at once), whereas the GC doesn't slow stuff down as 
> it goes along, but it has definite bursts where performance 
> tanks, because a collection is being run. I'd say that from D's 
> perspective, the main advantage of the GC over RC is that the 
> compiler can guarantee that it's @safe, which is more more 
> problematic with RC - that and you don't have to worry about 
> circular references with the GC like you do with RC.
>
> Overally, I don't think that it's particularly clearcut whether 
> RC or GC is better overall. The big thing is that the memory is 
> managed automatically rather than manually.

That's what I'm getting at. The comment shared by Mark does not 
contradict the blog post. The C++ community gave up on manual 
memory management, just taking a different route to automatic 
memory management, with the associated costs and benefits.



More information about the Digitalmars-d mailing list