On Thursday, 17 April 2014 at 15:39:38 UTC, Ola Fosheim Grøstad wrote:
On Thursday, 17 April 2014 at 15:02:27 UTC, Dicebot wrote:
void foo(OutputRange buffer)
{
   buffer.put(42);
}

`foo` can't be @nogc here if OutputRange uses GC as backing allocator. However I'd really like to use it to verify that no

Can't you write foo as a template? Then if "buffer" is a ring buffer the memory might be allocated by GC, which is ok if put() does not call the GC and is marked as such.

put() may call GC to grow the buffer, this is the very point. What is desired is to check if anything _else_ does call GC, thus the "weak @nogc" parallel.

Where this falls apart is when you introduce a compacting GC and the @nogc code is run in a real time priority thread. Then you need both @nogc_function_calls and @nogc_memory .

True hard real-time is always special, I am speaking about "softer" but still performance-demanding code (like one that is used in Sociomantic).

Of course, resorting to templates requires some thinking-ahead, and makes reuse more difficult.

I don't see how templates can help here right now.

You'll probably end up with the @nogc crowd creating their own NoGCOutputRange… :-P

Ola.

Reply via email to