Thread overview
implicit or module-wide @nogc
Jun 13, 2018
Gokhhy
Jun 13, 2018
Mike Franklin
Jun 13, 2018
Gokhhy
Jun 13, 2018
Gokhhy
Jun 13, 2018
Mike Franklin
Jun 13, 2018
Basile B.
June 13, 2018
Is there a way to define an entire module as @nogc or otherwise make it so I don't have to qualify every single function as @nogc?
June 13, 2018
On Wednesday, 13 June 2018 at 06:45:27 UTC, Gokhhy wrote:
> Is there a way to define an entire module as @nogc or otherwise make it so I don't have to qualify every single function as @nogc?

You can put attributes at the top of a module followed by a ":" to have them apply to everything below them.

module mymodule;

@nogc:

void nogcFunction1() { }

void nogcFunction2() { }

Mike
June 13, 2018
On Wednesday, 13 June 2018 at 06:45:27 UTC, Gokhhy wrote:
> Is there a way to define an entire module as @nogc or otherwise make it so I don't have to qualify every single function as @nogc?

---
module module_wide-nogc;

@nogc:

/*
declarations or statements...
*/
---

But this is not considered as a good practice.
1. One can work on the module and miss the global nogc
2. unittest are affected (array literals for example must be declared static immutable)
3. it cannot be temporarily canceled.

It depends on the context too. 200 slocs module or 5000 sloc module ? for a small one this could be ok.
June 13, 2018
On Wednesday, 13 June 2018 at 07:11:56 UTC, Mike Franklin wrote:
> On Wednesday, 13 June 2018 at 06:45:27 UTC, Gokhhy wrote:
>> Is there a way to define an entire module as @nogc or otherwise make it so I don't have to qualify every single function as @nogc?
>
> You can put attributes at the top of a module followed by a ":" to have them apply to everything below them.
>
> module mymodule;
>
> @nogc:
>
> void nogcFunction1() { }
>
> void nogcFunction2() { }
>
> Mike

Thanks, just what I was looking for.
June 13, 2018
On Wednesday, 13 June 2018 at 07:14:35 UTC, Gokhhy wrote:
> On Wednesday, 13 June 2018 at 07:11:56 UTC, Mike Franklin wrote:
>> On Wednesday, 13 June 2018 at 06:45:27 UTC, Gokhhy wrote:
>>> Is there a way to define an entire module as @nogc or otherwise make it so I don't have to qualify every single function as @nogc?
>>
>> You can put attributes at the top of a module followed by a ":" to have them apply to everything below them.
>>
>> module mymodule;
>>
>> @nogc:
>>
>> void nogcFunction1() { }
>>
>> void nogcFunction2() { }
>>
>> Mike
>
> Thanks, just what I was looking for.

Nevermind, it doesn't affect functions inside classes and structs.

I would be interested in what influenced the design decision to make opting out of garbage collection so difficult.
June 13, 2018
On Wednesday, 13 June 2018 at 07:19:24 UTC, Gokhhy wrote:

> Nevermind, it doesn't affect functions inside classes and structs.

Yeah, that's kindof unfortunate isn't it.  Just do the same thing within the class/struct scope.

class C {
   @nogc:

   void nogcMethod1() {}
   void nogcMehtod2() {}
}

> I would be interested in what influenced the design decision to make opting out of garbage collection so difficult.

Because D is more evolution then intelligent design, unfortunately.

Mike

June 13, 2018
On 6/13/18 3:24 AM, Mike Franklin wrote:
> Because D is more evolution then intelligent design, unfortunately.

I had to LOL on this, nice :)

-Steve