Specifying @nogc on structs seems to have no effect

Craig Black craigblack1234 at gmail.com
Tue Sep 19 13:46:20 UTC 2017


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
   }
}


More information about the Digitalmars-d mailing list