Old Quora post: D vs Go vs Rust by Andrei Alexandrescu

Ola Fosheim Grøstad ola.fosheim.grostad at gmail.com
Wed Jan 3 22:26:50 UTC 2018


On Wednesday, 3 January 2018 at 22:06:22 UTC, Mark wrote:
> I don't know much about GCs, but can you explain why that would 
> be necessary?

Necessary is perhaps a strong word, but since D will never put 
restrictions on pointers then you need something else than what 
Java/C#/JavaScript/Go is using.

There are many ways to do memory management, but if you want 
"smart" memory management where the programmer is relieved from 
the burden of manually making sure that things work then the 
compiler should also be able to reason about intent of the 
programmer and you need some way to express that intent.

E.g. Pony differentiate between different types of "ownership" 
and can transition between them, so you can go from memory that 
is isolated to a single pointer, pointers that only know the 
address but cannot access the content, pointers that are fully 
shared etc.

You also have something called effect-systems, which basically a 
sort of type system that can statically track that a file is 
opened before it is closed etc.

So, if you have a smart compiler that is supposed to do the hard 
work for you, you probably also want some way to ensure that it 
actually is doing the smart things and that you haven't 
accidentally written some code that will prevent the compiler 
from generating smart code.

For instance if you have a local garbage collector for a graph, 
you might want to statically ensure that there are noe external 
pointers into the graph when you call the collection process, 
although you might want to allow such pointers between 
collections. That way you don't have to scan more than graph 
itself, otherwise you would have to scan all memory that could 
contain pointers into the graph...




More information about the Digitalmars-d mailing list