comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Exception_Occurence and language designers
Date: Tue, 5 Dec 2017 09:35:12 +0100
Date: 2017-12-05T09:35:12+01:00	[thread overview]
Message-ID: <p05lnv$1p12$1@gioia.aioe.org> (raw)
In-Reply-To: p04ohh$kaa$1@dont-email.me

On 05/12/2017 01:16, G. B. wrote:
> Dmitry A. Kazakov <mailbox@dmitry-kazakov.de> wrote:
>> On 2017-12-04 21:27, G. B. wrote:
>>> Dmitry A. Kazakov <mailbox@dmitry-kazakov.de> wrote:
>>>
>>>> In Ada 83 exception was not a first-class type.
>>>
>>> Still isn’t.
>>
>> But its "class-wide" type Exception_Occurrence is.
> 
> Exception_Occurrence feels like an enumeration, > to me at least, albeit of places in a program,
> thus of a rather special set of “values”.

"Enumeration" is Exception_Id.

>> Then it became clear that the exception should carry
>> user-defined and other information.
> 
> User-defined  information being strings, and
> other information being places to be embedded in
> strings, plus names of exceptions.
> 
> How about this: the idea of creating normal,
> typed objects as payload of wild jumps in
> abnormal (exceptional) situations is rather optimistic.

It is no matter what is freely typed, exception itself or the attached 
object. The problem is upward closures. Consider this:

    begin
       declare
          type Message_In_The_Bottle is new Controlled with ...;
          overriding procedure Finalize (E in out Message_In_The_Bottle);
          ...
       begin
          raise Hey with Message_In_The_Bottle'(...);
       end;
    exception
       when Error : Hey =>
          -- The object of a dead type here

This works in C++ because there all types are global.

One possible solution is to have the type Root_Exception_Attachment and 
derive every exception-attached object type from there. When the scope 
of the type is left upon exception propagation the object will be 
demoted to its still existing parent.

Apart from being not very useful and requiring a lot of overhead upon 
propagation, the existing Ada finalization model cannot handle this. The 
attached type's Finalize must be called upon conversion, but the 
parent's Finalize not. Then the added components must be finalized. Ada 
cannot such this now.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de


  reply	other threads:[~2017-12-05  8:35 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-04 11:17 Exception_Occurence and language designers Mehdi Saada
2017-12-04 12:32 ` Simon Wright
2017-12-04 14:00   ` Mehdi Saada
2017-12-04 14:31     ` Dmitry A. Kazakov
2017-12-04 20:27       ` G. B.
2017-12-04 20:55         ` Dmitry A. Kazakov
2017-12-05  0:16           ` G. B.
2017-12-05  8:35             ` Dmitry A. Kazakov [this message]
2017-12-05 20:05               ` G. B.
2017-12-05 20:48                 ` Dmitry A. Kazakov
2017-12-04 17:43 ` Jeffrey R. Carter
replies disabled

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