DIP60: @nogc attribute

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 18 05:30:46 PDT 2014


On Thu, 17 Apr 2014 18:52:10 -0400, Walter Bright  
<newshound2 at digitalmars.com> wrote:

> On 4/17/2014 3:18 PM, Steven Schveighoffer wrote:
>> During the entire processing, you never increment/decrement a reference  
>> count,
>> because the caller will have passed data to you with an incremented  
>> count.
>>
>> Just because ARC protects the data, doesn't mean you need to constantly  
>> and
>> needlessly increment/decrement references. If you know the data won't  
>> go away
>> while you are using it, you can just ignore the reference counting  
>> aspect.
>
> The salient point there is "if you know". If you are doing it, it is not  
> guaranteed memory safe by the compiler. If the compiler is doing it, how  
> does it know?

When I said you, I misspoke. I meant the compiler. If it isn't sure, it  
increments the count. But any objects passed into a function are already  
incremented. Basically it's like a mutex lock. You only need to increment  
at the most outer level of where you are using it.

This idea that every time you pass around a variable you need to adjust  
counts is just not true. This is not shared_ptr.

> You really are doing *manual*, not automatic, ARC here, because you are  
> making decisions about when ARC can be skipped, and you must make those  
> decisions in order to have it run at a reasonable speed.

Absolutely not, the compiler knows whether the count needs to be  
incremented, I don't need to know. In fact, in ARC, you are NOT ALLOWED to  
increment or decrement the count manually.

-Steve


More information about the Digitalmars-d mailing list