Smart pointers instead of GC?

Frank Bauer y at z.com
Tue Feb 4 06:19:35 PST 2014


On Tuesday, 4 February 2014 at 13:18:51 UTC, Dicebot wrote:
> For me perfect solution would have been to use an allocator 
> concept as language basis instead and let you chose any 
> conformant allocator for built-in language features. With both 
> GC and ARC available in Phobos / druntime.

That is exactly what Rust did succsessfully.

http://pcwalton.github.io/blog/2013/06/02/removing-garbage-collection-from-the-rust-language/

got pulled.

They deprecated the @ pointer, which is a managed poiter 
equivalent to what D's 'new' produces, to a library solution.

They now have basically only ~T and &T left in the language. ~T 
being an owned pointer that frees at the end of its scope and &T, 
a borrowed pointer (or reference, but *not* RC) with no direct 
effect on memory management.

There is Rc<T> and Gc<T> in the library for those who wish to use 
them.

To quote from the above link:

>>
Programmers don’t know which to use, since some operations are 
available with ~ and some operations are available with @. 
Actually, we were confused on this point for a long time as 
well—it wasn’t clear whether ~ or @ would become dominant. We 
debated for a long time which to present first, ~ or @. However, 
as the language and community evolved, and coding standards 
became more settled, a clear winner emerged: the owning pointer 
~. In practice, the rule has been that programmers should use ~ 
to allocate in all circumstances except when they have no way of 
knowing precisely when the object in question should be freed.
<<

This is what happens if you give users choice.

One of Rust's priorities is to have a runtime footprint as small 
as possible. I would give priority to not break existing D code. 
So keep GC'd 'new' in the language (the runtime will never get as 
small as Rust's; don't care) and see if it is possible to add 
owned and ARC pointers from there.


More information about the Digitalmars-d mailing list