nothrow function callbacks in extern(C) code - solution

w0rp via Digitalmars-d digitalmars-d at puremagic.com
Fri Jun 20 04:28:56 PDT 2014


On Friday, 20 June 2014 at 11:07:48 UTC, Paolo Invernizzi wrote:
> On Thursday, 19 June 2014 at 19:58:58 UTC, Walter Bright wrote:
>
> <snip>
>
>> The callback function, being supplied by the D programmer, may 
>> throw and may call the garbage collector. By requiring the 
>> callback function to be also nothrow @nogc, this is an 
>> unreasonable requirement besides breaking most existing D code 
>> that uses qsort().
>
> <d.learn>
>
> I'm missing something, as I'm annotating all my C/API/etc 
> callback function with nothrow: when the callback throws, what 
> happens?
>
> I was thinking that this will mess-up the stack once the unwind 
> will proceed...
> What's the use-case for having such a callback 'throwable'?
>
> Thanks!
>
> </d.learn>
>
> ---
> Paolo

This is actually a really good point. How can a callback in C 
code expect to throw exceptions? Surely it should be nothrow 
anyway, because it's just not going to work otherwise. Maybe we 
should just strengthen the constraints for that, and make people 
update their code which isn't likely to work anyway. You can make 
any throwing function nothrow by catching Exceptions and throwing 
Errors instead at least. Ideally you wouldn't even throw Errors 
in C callbacks.


More information about the Digitalmars-d mailing list