On Tuesday, 27 June 2017 at 21:47:49 UTC, jag wrote:
On Tuesday, 27 June 2017 at 19:37:24 UTC, Moritz Maxeiner wrote:

As I have pointed out, your example occurs on the *caller* side, not the *callee* side. The proper solution is not for the callee to specify which exceptions it may throw, but for the caller to specify which exceptions it allows the callee to throw (using compile time introspection on the exception set).

Can I as a programmer who wants to call a function written by someone else inspect the declaration of that function and know what exceptions are possible?

* Can I as a programmer who wants to call a function written by someone else inspect that function's exception set?

Yes, as explained fully here [1], shown as an idiomatic D trait here [2], and a template based abstraction around that trait here [3]. It would need to be implemented, of course, but it's not conceptually hard.

If no how is this supposed to work?

It was explained multiple times in this thread.

I am supposed to specify that exceptions I want to allow the called function to throw?

You aren't supposed to do anything, but you can do that, yes.

The called function is not going to dynamically adapt itself and change the list of exceptions it throws, right?

What? A function's exception set is determined by its body and can be aggregated by the compiler in a single recursive pass in the static analysis phase.

So how can I know, before running the code, what exceptions are possible?

You mean the very first time you want to call it and you don't know the exception set yourself by looking at its signature? Put the call in a nothrow scope and compile the module (which is fast in D), the compiler will then complain which exceptions you didn't catch (requires improvement of nothrow analysis [1]).

[1] http://forum.dlang.org/post/[email protected] [2] http://forum.dlang.org/post/[email protected] [3] http://forum.dlang.org/post/[email protected]

Reply via email to