dsimcha wrote:
Multiple return values are a horrible substitute for exceptions, because they
require the programmer to explicitly check the return value. (When's the last
time you checked the return value of printf, or even malloc?) IMHO the best
thing
about exceptions is that they provide a sane default for error handling: If you
don't handle them then you've effectively asserted that they can't happen in
your
situation. If this "assertion" fails, then our program fails fast and with an
error message that massively narrows down where the problem is. I flat-out
refuse
to program in a language where the default is for errors to be ignored and I
have
to constantly write explicit error-checking boilerplate even if I don't care
about
handling the error.
Exception handling in D (or C++/Java for that matter) isn't that great
either. In D, you don't even know what exceptions a function may throw.
It's completely dynamic. You may even accidentally catch unknown
exceptions, because your catch-filter isn't "narrow" enough.
Java has checked exceptions, but they are misdesigned, get in the
programmers way, and generally suck. Feels almost like D copied the
standard Java feature by the letter, removing checked exceptions, and
call that an improvement.
Also, let's have a look how exceptions improve the robustness of most
Java code:
try { something(); } catch (Exception e) { Logger.getLogger().log(e); }
I guess D programmers are just better than D programmers, which makes
this example out of place, of course. Or they just let it fall through,
until it gets catched by a similar catch-all statement.
Generally, exceptions as they are implemented in some popular languages
seem to give the impression that you don't need to care about error
handling. That isn't always true and probably only works in small
command line tools.