On 08/12/2012 05:02 AM, Marco Leise wrote:
I just got a bit frustrated and wanted to say that I like working with 
Exceptions in Java a lot more. That has to do first but not foremost with the 
declaration:

---Java->>

class MyException extends Exception {
   public MyException(String msg) {
     super(msg);
   }
   public MyException(String msg, Throwable next) {
     super(msg, next)
   }
}

<<-Java---
---D->>

class MyException : Exception {
   this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable 
next = null) {
     super(msg, file, line, next);
   }
   this(string msg, Throwable next, string file = __FILE__, size_t line = 
__LINE__) {
     super(msg, file, line, next);
   }
}

<<-D---


---D->>
class MyException : Exception {
    mixin GenericExceptionConstructors;
}
<<-D---

The other think that I'd really like to see is an actual declaration for the 
user of a function to see what exceptions can be thrown - also inferred and 
checked by the compiler. In Java you cannot compile a function that throws some 
(checked) exception and doesn't declare that like this:

---Java->>

void foo() throws MyException {
   throw new MyException("test");
}

<<-Java---

This way you, as the author, are always aware of which Exceptions you handle 
inside the function and which may escape. This escalates to callers of the 
function as well, so that in the end the public API has an exact list of 
possibly thrown exceptions that the user must handle.
I have around a dozen different exceptions in a hierarchy and a few nested 
function calls. It's a maintenance horror to keep the DDoc up to date about 
thrown Exceptions. It also doesn't check the spelling or offers a link to the 
Exceptions.

...

I know that the Java way isn't perfect, because some lazy people write dummy 
exception handlers to silence the errors,
but its a worse solution to _not_ notify the user of a function, that it 
potentially throws exceptions, I think. So I
wish D was explicit about thrown Exceptions.


Well, any scheme for explicit exception annotations I can think of
is either unsound or impractical. What would you suggest concretely?

Reply via email to