comp.lang.ada
 help / color / mirror / Atom feed
From: Doctor Who <doc@tardis.org>
Subject: Re: Discriminants or Constructor Function for Limited Types
Date: Mon, 09 May 2022 12:19:19 +0200	[thread overview]
Message-ID: <sjqh7hh9pv2gqalco1s50l390454mc3hf3@4ax.com> (raw)
In-Reply-To: t590fe$3ef$1@gioia.aioe.org

On Sun, 8 May 2022 20:00:15 +0200, "Dmitry A. Kazakov"
<mailbox@dmitry-kazakov.de> wrote:

>On 2022-05-08 19:19, Doctor Who wrote:
>> On Sun, 8 May 2022 10:37:48 +0200, "Dmitry A. Kazakov"
>
>>> Note, that your code is already unsafe because nobody knows if
>>> Create_or_Open_Output always opens the file and because there is no
>>> guarantee that the file is closed, while the design
>>>
>>>     declare
>>>        Output_File : Some_File_Type;
>>>     begin
>>>        Write_Output (Output_File, Data);
>>>     end;
>>>
>>> is 100% safe.
>> 
>> Not in the case that your data space is exhausted, in that case
>> Write_Output will fail, because you have no checks of free space
>> before writing.
>
>Upon a write error an exception will propagate and Output_File will go 
>out of the scope. The file will be closed and the exception will 
>continue its way. This is a safe behavior. Randy's code is unsafe and 
>requires catching and re-raising I/O exceptions in the client code.
>
>This is an illustration why exceptions should be allowed to propagate 
>out of Finalize. When Finalize is used to close a handle this may fail 
>and there is no way to retry inside Finalize. The choice in Ada is 
>between aborting the program or sweeping the problem under the rug 
>ignoring the problem. A more sane approach would be to propagate 
>exception out of Finalize indicating the problem.

if you do a check before write there is no need to rise and propagate
an exception.

  parent reply	other threads:[~2022-05-09 10:19 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-04  9:02 Discriminants or Constructor Function for Limited Types R R
2022-05-04  9:40 ` Jeffrey R.Carter
2022-05-04  9:47 ` Dmitry A. Kazakov
2022-05-04 23:49   ` Randy Brukardt
2022-05-05  6:56     ` Dmitry A. Kazakov
2022-05-06  1:53       ` Randy Brukardt
2022-05-06  8:48         ` Dmitry A. Kazakov
2022-05-07  3:26           ` Randy Brukardt
2022-05-07 14:55             ` Dmitry A. Kazakov
2022-05-08  2:32               ` Randy Brukardt
2022-05-08  8:37                 ` Dmitry A. Kazakov
2022-05-08 17:19                   ` Doctor Who
2022-05-08 18:00                     ` Dmitry A. Kazakov
2022-05-08 18:07                       ` Doctor Who
2022-05-09  8:52                       ` Niklas Holsti
2022-05-09  9:45                         ` Dmitry A. Kazakov
2022-05-09 10:19                       ` Doctor Who [this message]
2022-05-09 11:15                         ` Dmitry A. Kazakov
2022-05-09 12:05                           ` Doctor Who
2022-05-09 12:31                             ` Dmitry A. Kazakov
2022-05-10  4:48                   ` Randy Brukardt
2022-05-10  6:18                     ` Dmitry A. Kazakov
2022-05-04 15:05 ` AdaMagica
2022-05-05  9:59 ` R R
replies disabled

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