anonymous functions and scope(exit)

frame frame86 at live.com
Sun Jul 4 14:12:19 UTC 2021


On Sunday, 4 July 2021 at 10:07:08 UTC, jfondren wrote:

>>Not cleaning up after an Error is thrown is allowed by the D 
>>spec. This enhancement allows much better code to be generated 
>>for `nothrow` code when `scope` is used. It will also not 
>>unwind declarations with destructors in `nothrow` code when 
>>Errors are thrown.
>
> I read this initially as "it is a bug for scope(exit) to ever 
> run after an Error is thrown", but it's an optimization for 
> nothrow code, which fits what you're seeing.

So it's might not a bug but not well documented.

```scope(...)``` still acts as ```try... catch(Throwable)... 
finally``` as logic people would expect although not written in 
stone anywhere.

Code within that blocks that are not seen by the compiler as 
'nothrow' will be executed. But the compiler may silently mark 
code as 'nothrow' if possible and then this "feature" gets 
enabled and cleanup will be discarded.




More information about the Digitalmars-d-learn mailing list