@gc attribute for bypassign @nogc

default0 via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 28 09:58:14 PDT 2016


On Thursday, 28 July 2016 at 16:45:05 UTC, bitwise wrote:
> On Thursday, 28 July 2016 at 16:15:04 UTC, Guillaume Piolat 
> wrote:
>> On Thursday, 28 July 2016 at 15:24:10 UTC, bitwise wrote:
>>>
>>> It's not about running out of memory. It's a performance 
>>> issue.
>>>
>>> Example: In the following class, it would be perfectly fine, 
>>> and even expected to allocate in start() but not in update(). 
>>> This is because start() gets called once on object 
>>> initialization, but update() would get called every frame.
>>>
>>
>> Vladimir implemented counting in -profile=gc, it gives you the 
>> number of allocations and the amount allocated for each 
>> allocation point.
>
> I'm not sure if this point is meant to be for or against what 
> I'm suggesting, but still, I'm thinking in terms of 
> *proactively* writing efficient code, not allowing an app get 
> to the point where you need to run a profiler.
>
> The situation is similar to using @safe. You *could* just write 
> code however you want, wait until it crashes, then try to find 
> the problem using Valgrind or something, but that's bad for 
> obvious reasons.
>
>     Bit

Just my 2 cents on naming: what you want sounds a lot more like 
@warngc than @assumenogc or whatever was floating around before. 
What such an attribute should do and if its worth implementing is 
hard to figure out, though. Presumably you'd have your update() 
method marked @warngc but then how is the compiler supposed to 
know that an allocation like this:

class A {
     void update() @warngc {
         if(rareCondition()) {
             // something that allocates
         }
     }
}

is perfectly fine, but something like this

class B {
     void update() @warngc {
         if(almostAlwaysTrue()) {
             // something that allocates
         }
     }
}

is not?
That issue aside, what exactly do you envision the compiler to 
tell you (examples of error messages and code patterns it should 
detect, examples of code patterns that it should NOT detect and 
are fine) incase it automagically finds problematic code?

I'm having trouble putting a thumb on what you want following 
this thread, because what you are describing feels a bit vague to 
me.


More information about the Digitalmars-d mailing list