Specifying @nogc on structs seems to have no effect

Jonathan M Davis newsgroup.d at jmdavisprog.com
Tue Sep 19 13:59:27 UTC 2017


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



More information about the Digitalmars-d mailing list