comp.lang.ada
 help / color / mirror / Atom feed
From: sbelmont700@gmail.com
Subject: Re: Press Release - Ada 2012 Language Standard Approved by ISO
Date: Wed, 26 Dec 2012 17:00:47 -0800 (PST)
Date: 2012-12-26T17:00:47-08:00	[thread overview]
Message-ID: <e9f91590-75b2-4cb4-b897-e8f06d0128e6@googlegroups.com> (raw)
In-Reply-To: <87sj6tre9s.fsf@mid.deneb.enyo.de>

This is just one programmer's opinion based on what I've seen in C++ and Java, but exception specifications are a bad path that goes nowhere.

Consider the static case, where a subprogram has to specify a superset of all the specifications of subprograms it calls.  This will be of limited value, since you almost always end up being coupled to an API that you don't have control over (gtkAda, Claw, etc), which are written pre-2012 and are not likely to be updated anytime soon.  Unless they are painstakingly revised to change the default "raises anything" (which is not going to happen, since you cut out all pre-2012 customers), then all the subprograms that call them must also 'raise anything', and those that call those must 'raise anything' as well in a viral nature, and so on and so on for everything, and you end up with all subprograms raising everything, and it's a lost cause.  The dynamic case (as in C++) is just as bad, since when an unspecified exceptions happens, the only thing left to do is continue erroneously or obfuscate things by raising a different exception than what originally happened, and you're actually worse off than before.

Secondly, the point is moot for OOP since the goal is to use classwide types.  Putting an exception specification on a parent type automatically restricts all the child types (which may not even be thought of yet, much less written) to following that same model, which is often not the case.  Similar to the guideance of making the controlling operand 'in out' to anticipate future child types that might need to make state changes, any parent type would be unwise to dictate what exceptions a future child implementation might need to raise by putting anything other than a 'raises anything'.  So even if you could put perfect exception specifications on everyting, once you start dealing with the classwide type, it's all out the window anyway.

Finally, IMHO, exceptions are NOT a property of the interface but of the implementation (we will likely have to agree to disagree on this).  You can take a subprogram that works one certain way (and potentially raises one set of exceptions), and then rework the guts to work an entirely different way but produce the same output with the same inputs, and raises a whole new set of exceptions; e.g. if you allocate and free your variables instead of declaring them, that changes the subprograms interface because now you might raise STORAGE_ERROR?  That's a side effect of the implementation, not a change to the interface.  Otherwise, you would have to go back and update the interface nearly every time you change the implementation, which defeats the purpose.

I'm of the school of thought that says every subprogram has just one inherent contract when it comes to exceptions: as long as all the parameters and pre/post conditions are met, the subprogram will *never raise anything*.  Or, to put it another way, an exception is an indication that the contract with the interface has NOT been met.  You don't need to know which ones may or may not be raised, since as long as you meet the pre-conditions they won't ever happen anyway.  If you think you need an exception specification, then IMHO what you really need is another precondition.

Just my $0.02

-sb



  reply	other threads:[~2012-12-27  1:00 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-18  7:45 Press Release - Ada 2012 Language Standard Approved by ISO Dirk Craeynest
2012-12-18 16:57 ` Robert A Duff
2012-12-18 21:12   ` Bill Findlay
2012-12-18 21:36     ` Jeffrey Carter
2012-12-18 21:57       ` Bill Findlay
2012-12-19  8:33     ` Dmitry A. Kazakov
2012-12-19  9:00       ` Georg Bauhaus
2012-12-19  9:19         ` Dmitry A. Kazakov
2012-12-19  9:21           ` Georg Bauhaus
2012-12-19  9:38             ` Dmitry A. Kazakov
2012-12-19 12:23               ` Georg Bauhaus
2012-12-19 14:34       ` Bill Findlay
2012-12-20  1:52       ` Randy Brukardt
2012-12-21  9:01         ` Dmitry A. Kazakov
2012-12-21 10:13           ` Georg Bauhaus
2012-12-21 10:34             ` Georg Bauhaus
2012-12-21 13:38             ` Dmitry A. Kazakov
2012-12-22  1:40           ` Randy Brukardt
2012-12-22  9:02             ` Dmitry A. Kazakov
2012-12-22 22:38               ` Georg Bauhaus
2012-12-23  8:08                 ` Dmitry A. Kazakov
2012-12-23 23:38                   ` Shark8
2012-12-24  2:44                     ` sbelmont700
2012-12-24  5:29                       ` Shark8
2012-12-25 21:51                       ` Florian Weimer
2012-12-27  1:00                         ` sbelmont700 [this message]
2012-12-27  1:47                           ` Randy Brukardt
2012-12-27 14:29                             ` sbelmont700
2012-12-27 15:30                               ` Dmitry A. Kazakov
2012-12-27 18:48                                 ` Jeffrey Carter
2012-12-27 21:54                                   ` Randy Brukardt
2012-12-27 22:09                                     ` J-P. Rosen
2013-01-11 11:41                                     ` Yannick Duchêne (Hibou57)
2013-01-11 11:35                                   ` Yannick Duchêne (Hibou57)
2013-01-11 16:13                                     ` Jacob Sparre Andersen
2013-01-12  2:06                                       ` Randy Brukardt
2013-01-11 11:33                                 ` Yannick Duchêne (Hibou57)
2013-01-11 14:15                                   ` Dmitry A. Kazakov
2013-01-11 16:19                                 ` File_Exists (Was: Press Release - Ada 2012 Language Standard Approved by ISO) Jacob Sparre Andersen
2013-01-11 19:36                                   ` Yannick Duchêne (Hibou57)
2013-01-14  5:09                                     ` File_Exists Jacob Sparre Andersen
2013-01-12  7:55                                   ` File_Exists (Was: Press Release - Ada 2012 Language Standard Approved by ISO) Georg Bauhaus
2012-12-27 20:12                             ` compilers, was Re: Press Release - Ada 2012 Language Standard Approved by ISO tmoran
2012-12-27 20:54                               ` Shark8
2012-12-27 22:00                               ` Randy Brukardt
2012-12-27 10:05                           ` Dmitry A. Kazakov
2013-01-11 11:28                           ` Yannick Duchêne (Hibou57)
2013-01-11 14:21                             ` Dmitry A. Kazakov
2013-01-11 14:23                               ` Yannick Duchêne (Hibou57)
2012-12-24  6:44                   ` Yannick Duchêne (Hibou57)
2012-12-24  9:02                     ` Dmitry A. Kazakov
2012-12-24 11:13                       ` Yannick Duchêne (Hibou57)
2012-12-24 15:49                         ` Exception contracts for Ada? Was: " Peter C. Chapin
2012-12-24 16:34                           ` Dmitry A. Kazakov
2012-12-24 19:45                             ` Exception contracts for Ada? Peter C. Chapin
2012-12-25 11:09                               ` Dmitry A. Kazakov
2012-12-27  2:38                               ` Randy Brukardt
2012-12-27  2:16                           ` Exception contracts for Ada? Was: Re: Press Release - Ada 2012 Language Standard Approved by ISO Randy Brukardt
2012-12-27 15:03                             ` Peter C. Chapin
2012-12-27  1:17               ` Randy Brukardt
2013-01-11 17:10       ` Marius Amado-Alves
2012-12-20 21:55     ` Anh Vo
2012-12-21  1:04       ` Bill Findlay
2012-12-18 23:24   ` Randy Brukardt
2012-12-19  8:35     ` Georg Bauhaus
2012-12-19  9:03       ` Dmitry A. Kazakov
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox