UDA and trait for non-GC managed pointers
Basile B. via Digitalmars-d
digitalmars-d at puremagic.com
Sat Oct 15 10:48:13 PDT 2016
On Saturday, 15 October 2016 at 16:22:35 UTC, Nordlöw wrote:
> Is there a way to check if a pointer is supposed to point to
> non-GC allocated memory? I presume not. This is needed to
> prevent unnecessary calls to `GC.addRange` in containers with
> elements of a type that in turn is a container-like struct with
> non-GC allocated memory.
>
> If not, maybe we could tag those non-GC-mangaged pointers with
> a UDA, preferrably `@nogc`, and then build a trait, say,
> `hasGCIndirections` that doesn't include @nogc-pointers.
>
> What do you think?
I agree. We are several people to do it already. I've started to
during last spring (see
https://forum.dlang.org/post/ficbsdfokvbvslatmomr@forum.dlang.org).
So far I use "@NoGc" and "@TellGcRange" added.
"@NoGc" is like what you describe, but it also allows to annotate
class instances and, very important: D builtin array !
"@TellGcRange" prints a diagnostic at compile time which allows
to find which aggregate members force my equivalent of "make"
(called "construct") to declare a GC range (it should even be a
root actually...).
To be honest I find this system way more useful that the function
attribute @nogc.
My trait is here
(https://github.com/BBasile/iz/blob/master/import/iz/memory.d#L145) but it's quite similar to the one used in EMSI containers (with diagnostic added).
More information about the Digitalmars-d
mailing list