DIP60: @nogc attribute
John Colvin via Digitalmars-d
digitalmars-d at puremagic.com
Sun Apr 20 11:48:47 PDT 2014
On Saturday, 19 April 2014 at 18:41:39 UTC, Walter Bright wrote:
> On 4/19/2014 11:05 AM, Dicebot wrote:
>> I feel like the origin of the discussion has been completely
>> lost here and we
>> don't speak the same language right now. The very point I have
>> made initially is
>> that @nogc in a way it is defined in your DIP is too
>> restrictive to be
>> effectively used in Phobos.
>>
>> In lot of standard library functions you may actually need to
>> allocate as part
>> of algorithm, strict @nogc is not applicable there. However,
>> it is still
>> extremely useful that no _hidden_ allocations happen outside
>> of weel-defined
>> user API and this is something that less restrictive version
>> of @nogc could help
>> with.
>>
>> The fact that you propose me to use unit tests to verify same
>> guarantees hints
>> that I have completely failed to explain my proposal but I
>> can't really rephrase
>> it any better without some help from your side to identify the
>> point of confusion.
>
> The way I understood your idea, was that a template could be
> marked @nogc, and yet still allow template arguments that
> themselves may gc.
>
> This can be accomplished by creating a unit test that passes
> non-allocating template parameters, and then verifying the
> instantiation is @nogc.
The only way that works is if the unittest has coverage of all
possible currently non-GC-using instantiations of all templates
all the way down the call-tree.*
Imagine the case where some function deep down the call-tree has
a `static if(T == NastyType) doGCStuff();`.
In order to protect against this, you have to check the internals
of the entire call-tree in order to write the required unittest,
and verify manually that you haven't missed a case every time
anything changes.
*alright, technically only those that can be instantiated by the
function your testing, but this still blows up pretty fast.
More information about the Digitalmars-d
mailing list