Exceptions in @nogc code

Jacob Carlborg via Digitalmars-d digitalmars-d at puremagic.com
Sat Apr 1 07:50:34 PDT 2017


On 2017-04-01 15:34, Andrei Alexandrescu wrote:
> Walter and I discussed the following promising setup:
>
> Use "throw new scope Exception" from @nogc code. That will cause the
> exception to be allocated in a special stack-like region.
>
> If the catching code uses "catch (scope Exception obj)", then a
> reference to the exception thus created will be passed to catch. At the
> end of the catch block there's no outstanding reference to "obj" so it
> will be freed. All @nogc code must use this form of catch.
>
> If the catching code uses "catch (Exception obj)", the exception is
> cloned on the gc heap and then freed.
>
> Finally, if an exception is thrown with "throw new Exception" it can be
> caught with "catch (scope Exception obj)" by copying the exception from
> the heap into the special region, and then freeing the exception on the
> heap.
>
> Such a scheme preserves backward compatibility and leverages the work
> done on "scope".

Sounds interesting. Any more details about how the exception will be 
allocated.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list