On 02/19/2017 12:51 PM, timmyjose wrote:
a). So the GC is part of the runtime even if we specify @nogc
Yup. @nogc is per function, not per program. Other functions are allowed
to use the GC.
b). Do we manually trigger the GC (like Java's System.gc(), even though
that's not guaranteed), or does it get triggered automatically when we
invoke some operations on heap allocated data and/or when the data go
out of scope?
You can trigger a collection manually with GC.collect [1]. Otherwise,
the GC can do a collection when you make a GC-managed allocation. If you
don't make GC allocations, e.g. because you're in @nogc code and the
compiler doesn't allow you to, then no GC collections will happen.
c). Does Rust have analogues of "new" and "delete", or does it use
something like smart pointers by default?
D, not Rust, right?
D uses `new` for GC allocations. `new` returns a raw pointer or a
dynamic array (pointer bundled with length for bounds checking).
There is `delete`, but it's shunned/unfashionable. Maybe it's going to
be deprecated, I don't know. You're supposed to let the GC manage
deletion, or use `destroy` [2] and GC.free [3] if you have to do it
manually.
Of course, you can also call C functions like `malloc` and `free` and do
manual memory management.
Regarding smart pointers, I'm not up to speed. There's
std.typecons.Unique [4], but I don't know how it compares to other
languages.
[1] https://dlang.org/phobos/core_memory.html#.GC.collect
[2] https://dlang.org/phobos/object.html#.destroy
[3] https://dlang.org/phobos/core_memory.html#.GC.free