DIP60: @nogc attribute

Peter Alexander via Digitalmars-d digitalmars-d at puremagic.com
Wed Apr 16 13:10:36 PDT 2014


On Wednesday, 16 April 2014 at 19:53:01 UTC, bearophile wrote:
> Peter Alexander:
>
>> * Does @nogc => nothrow? If I'm not mistaken, throw must 
>> through a GC-allocated Throwable.
>>
>> * If the above is true, does that mean exceptions cannot be 
>> used at all in @nogc code?
>
> This should work:
>
> void foo() @nogc nothrow {
>     static const err = new Error("error");
>     throw err;
> }
>
> Bye,
> bearophile

(I assume that nothrow isn't meant to be there?)

What if the exception needs information about the error?

You could do something like this:

void foo() @nogc
{
     static err = new Error();
     if (badthing)
     {
         err.setError("badthing happened");
         throw err;
     }
}

However, that raises a second question: since err is allocated 
when a new thread is created, does that mean @nogc functions 
cannot create threads in the presence of such static 
initialisation?


More information about the Digitalmars-d mailing list