From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on ip-172-31-65-14.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.6 Path: eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: Doctor Who Newsgroups: comp.lang.ada Subject: Re: Discriminants or Constructor Function for Limited Types Date: Mon, 09 May 2022 12:19:19 +0200 Organization: A noiseless patient Spider Message-ID: References: <0b4ddd38-1f19-44fe-acd9-43a316ec9d29n@googlegroups.com> <7puf7h59k2e2ns66918i95s847na2b8num@4ax.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Injection-Info: reader02.eternal-september.org; posting-host="5a30916ed513fc626fe39b717d553480"; logging-data="22516"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+hWmRMKkohizD/ThXjVDYi" User-Agent: ForteAgent/8.00.32.1272 Cancel-Lock: sha1:Iogn8RutB4uzU3i9mXVl5F57dSc= Xref: reader02.eternal-september.org comp.lang.ada:63834 List-Id: On Sun, 8 May 2022 20:00:15 +0200, "Dmitry A. Kazakov" 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.