On Tuesday, 19 September 2017 at 13:32:59 UTC, Eugene Wissner wrote:
On Tuesday, 19 September 2017 at 13:11:03 UTC, Craig Black 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


}


struct Array(T)
{
@nogc:
  ...
}
?

Thanks, I didn't know you could to that but it still doesn't give me the behavior that I want:

class Foo
{
}

struct MyStruct
{
@nogc:
public:
Foo foo; // This does not produce an error, but it still requires a GC scan
  void Bar()
  {
    foo = new Foo; // This produces an error
  }
}

Reply via email to