On Thu, 08 May 2014 09:15:13 +0000
amehat via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
wrote:

> Hello everyone,
>
> in java, you can have exceptions on methods.
> Thus we can write:
> public static void control (String string) throws
> MyException {}
>
> Is that possible in D and if so how does it work? If I write this
> D:
>
> public void testMe () throws MyException {}
>
> The compiler refuses to compile.
>
> What is the proper behavior for this D?
>
> thank you

At this point, the programming community at large seems to have decided that
while checked exceptions seem like a good idea, they're ultimately a bad one.
This article has a good explanation from one of the creators of C# as to why:

http://www.artima.com/intv/handcuffs.html

At this point, Java is the only language I'm aware of which has checked
exceptions (though there may be a few others somewhere), and newer languages
have learned from Java's mistake and chosen not to have them.

What D has instead is the attribute nothrow. Any function marked with nothrow
cannot throw an exception. e.g.

auto func(int bar) nothrow {...}

It's similar to C++11's noexcept except that it's checked at compile time
(like Java's checked exceptions), whereas noexcept introduces a runtime check.

If a function is not marked with nothrow, then the only ways to know what it
can throw are to read the documentation (which may or may not say) or to read
the code. There are obviously downsides to that in comparison to checked
exceptions, but the consensus at this point is that it's ultimately better.

- Jonathan M Davis

Reply via email to