DIP60: @nogc attribute

Don via Digitalmars-d digitalmars-d at puremagic.com
Tue Apr 22 04:00:59 PDT 2014


On Thursday, 17 April 2014 at 19:51:38 UTC, Walter Bright wrote:
> On 4/17/2014 10:41 AM, Dicebot wrote:
>> On Thursday, 17 April 2014 at 16:57:32 UTC, Walter Bright 
>> wrote:
>>>> With current limitations @nogc is only useful to verify that 
>>>> embedded code which
>>>> does not have GC at all does not use any GC-triggering 
>>>> language features before
>>>> it comes to weird linker errors / rt-asserts. But that does 
>>>> not work good either
>>>> because of next problem:
>>>
>>> Remember that @nogc will be inferred for template functions. 
>>> That means that
>>> whether it is @nogc or not will depend on its arguments being 
>>> @nogc, which is
>>> just what is needed.
>>
>> No, it looks like I have stated that very wrong because 
>> everyone understood it
>> in completely opposite way. What I mean is that `put()` is NOT 
>> @nogc and it
>> still should work. Same as weakly pure is kind of pure but 
>> allowed to mutate its
>> arguments, proposed "weakly @nogc" can only call GC via 
>> functions directly
>> accessible from its arguments.
>
> I don't see value for this behavior.

It turns out to have enormous value. I will explain this in my 
DConf talk. A little preview:
Almost all of our code at Sociomantic obeys this behaviour, and 
it's probably the most striking feature of our codebase. By 
"almost all" I mean probably 90% of our code, including all of 
our libraries. Not just the 5% - 10% that could marked as @nogc 
according to your DIP.

The key property it ensures is, if you make N calls to the 
function, the number of GC allocations is in O(1). We don't care 
if makes 0 allocations or 17.

We're not really interested in whether a function uses the GC or 
not, since most interesting functions do need to do some memory 
allocation.

Ideally, we'd want an attribute which could applied to *all* of 
Phobos, except for some convenience functions. We have no 
interest in library code which doesn't behave in that way.



More information about the Digitalmars-d mailing list