[J3] Exception handling reference

William Clodius w.clodius at icloud.com
Tue Sep 4 10:14:47 EDT 2018

Herb Sutter’s criticism of the C++ exception system identifies three general 
categories of problems. First arbitrary types of objects can be thrown. As a 
result, the thrown objects cannot be placed on the stack and run time type type
inference has to be used. This makes the performance overhead when an 
exception occurs much larger and less predictable than it need be. This
problem i largely C++ specific. Second, the current C++ (and Ada) system 
encourages the use of exceptions for unhandleable problems; memory faults 
and programmer errors. This means both that users are using inappropriate 
methods for dealing with those problems when contract based programming 
would be better, and throwing an exception is more common than
it need be. If throwing an exception is not uncommon then the performance 
when throwing an exception is more of an issue. Partly as a result Ada 2012
added contract based programming methods. Third, because of a combination
of the second issue and C++’s automatic passing of exceptions up the stack,
it is harder for programmers and compilers to reason about exceptions.
This leads to more lost optimizations.

> On Sep 4, 2018, at 12:41 AM, Van Snyder via J3 <j3 at mailman.j3-fortran.org> wrote:
> On Mon, 2018-09-03 at 23:22 -0600, William Clodius via J3 wrote:
>> I thought about writing a paper on the semantics of exception handling, but decided against
>> it. However my research did find some references. To me the most useful for J3 would be Herb 
>> Sutter’s paper for SC22/WG21, "Zero-overhead deterministic exceptions: Throwing values”, 
>> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf an an alternative C++ 
>> exception handling scheme that he hopes would have much lower overhead than  the current C++ 
>> scheme. FWIW this paper has an extensive reference list that includes other papers/blogs that 
>> I also found interesting.
> I learned a few years ago from Randy Brukardt that the exception system
> in the Janus Ada processor (the one he's responsible for) has, in his
> words "very low overhead" unless an exception occurs.
> He also told me that the exception system in the GNU Ada Translator has
> no overhead unless an exception occurs.  Maybe it uses the method Sutter
> described.  But it's quite a bit older than 2018, so maybe Robert Dewar
> and his colleagues invented a different zero-overhead method.
> There is no excuse to object to exception handling on performance
> grounds.
> BTW, if a multilanguage program that appears to the Fortran parts of it
> to be C, are actually C++ or Ada, in our present condition, if they
> throw an exception, it would skip over any intermediate Fortran parts,
> and their finalizers wouldn't be run, and their allocatable and
> automatic variables wouldn't be cleaned up.  There is a chance that a
> Fortran exception system could be integrated with a companion
> processor's exception system.

More information about the J3 mailing list