From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Exception_Occurence and language designers Date: Mon, 4 Dec 2017 21:55:20 +0100 Organization: Aioe.org NNTP Server Message-ID: References: NNTP-Posting-Host: sWq1fEaAu/L5fGxxOY76vQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 X-Notice: Filtered by postfilter v. 0.8.2 Content-Language: en-US Xref: reader02.eternal-september.org comp.lang.ada:49368 Date: 2017-12-04T21:55:20+01:00 List-Id: On 2017-12-04 21:27, G. B. wrote: > Dmitry A. Kazakov wrote: > >> In Ada 83 exception was not a first-class type. > > Still isn’t. But its "class-wide" type Exception_Occurrence is. >> In terms of tagged types it is like this: > > Exceptions may be understood to be part > of control structure. Doing so lets you see > them as neither objects nor subprograms. > So, in exceptional situations, the program > isn’t moving along *if*s and *loop*s and calls; > rather, a different mechanism of jumping is > triggered. You can handle the situation by > referring to its name, the exception’s, > in a handler. That was Ada 83. Then it became clear that the exception should carry user-defined and other information. One could of course invent new syntax in order to query and handle that information (e.g. to save and restore exception). Ada 95 decided to use normal types and values instead. So Exception_Id, Exception_Occurrence, Raise_Exception, Save_Occurrence appeared. > Other answers explain what to do if the > name is not in scope and how to print > interesting information about what named > exception has caused the situation. Exception_Id is like Ada.Tag, it never actually dies. That is the problem with making exception full types like in C++ (along with loosing nice Ada's flat exception catch syntax in favor of ugly C++'s walkthrough catcher). -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de