More radical ideas about gc and reference counting

ponce via Digitalmars-d digitalmars-d at puremagic.com
Sun May 11 04:42:35 PDT 2014


On Sunday, 11 May 2014 at 08:59:42 UTC, Walter Bright wrote:
>
> D also cannot be performance competitive with C++ if pervasive 
> ARC is used and memory safety is retained. Rust is attempting 
> to solve this problem by using 'borrowed' pointers, but this is 
> unproven technology, see my reply to Manu about it.

I work in a C++ shop and as I see it, resource management is 
becoming a solved problem:

- resource owners holds a std::unique_ptr<T> on them. Resource 
release is taken care by C++ destructors normally. That means to 
be exception-safe, each resource type must better have its class.
- resource users eventually "borrow" the resource by taking a raw 
pointer out of the unique pointer. What Rust would do with 
lifetimes here is ensure that the resource is still there since 
move semantics seems pervasive in this language. In C++ we ensure 
the resource holder outlive the users.
- std::shared_ptr is not needed with such constraints. This means 
no cycles in the object graph. TBH I have yet to find a 
dependency scheme that can't be done that way.

When I use D I can't help but think that releasing resources 
feels more manual and error-prone ("oops that resource should 
have been a struct not a class" and such traps).

I do not have huge concerns about D GC, but I would be glad to 
have more support for owned pointers (ie. Unique!T in Phobos or 
better). I have no idea how to make it safe ie. ensure the 
resource outlive its users.



More information about the Digitalmars-d mailing list