Deterministic Memory Management With Standard Library Progress

Dukc via Digitalmars-d digitalmars-d at puremagic.com
Sat Mar 4 10:43:47 PST 2017


On Saturday, 4 March 2017 at 18:09:10 UTC, Anthony wrote:
> [snip]

It can be done. C standard library, and thus malloc(), calloc() 
and free() come with the standard library. There also are more 
high-level was to do it, std.typecons.scoped, 
std.experimental.allocator and Dlib (a dub package) to name a 
few. You do not have to resign any parts of D standard library to 
do that.

That being said, manual memory management is recommended only if 
you have a specific reason to use it, because D compiler cannot 
verify memory safety of code doing such things. But remember that 
neither could C++. In D you can still at least have the compiler 
to verify those parts of the code where you don't manage memory 
manually. So definitely you're better off than in c++ in this 
regard.

Value types initialized directly on the stack are deterministicly 
destroyed without having to compromise @safe. (@safe means code 
which compiler verifies for memory safety. It isn't perfect, but 
close enough to catch almost all errors) Of course, not 
everything can be a value type because some data needs to have a 
variable size.

Scoped pointers is an upcoming feature which should, as I 
understand it, allow deterministic memory management with 
reference types too, in @sfe code. It is already implemented, but 
still seems to me to have too much unfinished corner cases to do 
its job yet. The standard library is not yet compilant with that 
feature. I believe, trough, that it will become much better.

That all assuming that "deterministic" means deterministic 
freeing of the memory and calling of destructors.


More information about the Digitalmars-d mailing list