On Sunday, 20 April 2014 at 18:48:49 UTC, John Colvin wrote:
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.

Looks like John has similar thinking pattern for this specific case :P

Also you proposal does not add any hygiene checks to non-template functions _and_ requires to create a boilerplate output range mocks (for all possible duck types) and extra static asserts for all functions that you may want to mark as weak @nogc. I don't see it as clean solution that can actually be used in a library.

The very marketing value of @nogc is not to show that something like it is possible (it already is) but to show "hey, look how easy and clean it is!"

Reply via email to