On Tuesday, September 19, 2017 13:11:03 Craig Black via Digitalmars-d wrote: > I've recently tried coding in D again after some years. One of > my earlier concerns was the ability to code without the GC, which > seemed difficult to pull off. To be clear, I want my programs to > be garbage collected, but I want to use the GC sparingly so that > the mark and sweep collections will be fast. So I want > guarantees that certain sections of code and certain structs will > not require the GC in any way. > > I realize that you can allocate on the non-GC heap using malloc > and free and emplace, but I find it troubling that you still need > to tell the GC to scan your allocation. What I would like is, for > example, to be able to write a @nogc templated struct that > guarantees that none of its members require GC scanning. Thus: > > @nogc struct Array(T) > { > ... > } > > class GarbageCollectedClass > { > } > > void main() > { > Array!int intArray; // fine > > > }
@nogc is a function attribute. It has no effect on types except on their member functions. All it does is guarantee that a function marked with @nogc cannot call any function which is not @nogc and cannot do any operation which is not considered @nogc. It's to guarantee that a function does not use the GC and has nothing more to do with types than attributes like @safe or nothrow do. - Jonathan M Davis