Combining the Robustness of Checked Exceptions with the Flexibility of Unchecked Exceptions using Anchored Exception Declarations

Ever since their invention 30 years ago, checked exceptions have
been a point of much discussion. On the one hand, they increase
the robustness of software by preventing the manifestation of unanticipated
checked exceptions at run-time. On the other hand, they
decrease the adaptability of software because they must be propagated
explicitly, and must often be handled even if they cannot be
signalled.

We show that the problems with checked exceptions are caused
by a lack of expressiveness of the exceptional return type of a
method, which currently dictates a copy & paste style. We add the
required expressiveness by introducing anchored exception declarations,
which allow the exceptional behavior of a method to be
declared relative to that of others. We present the formal semantics
of anchored exception declarations, along with the necessary rules
for ensuring compile-time safety, and give a proof of soundness.
We show that anchored exception declarations do not violate the
principle of information hiding when used properly, and provide a
guideline for when to use them.

We have implemented anchored exception declarations in Cappuccino,
which is an extension to the ClassicJava programming language.