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: Extending a third party tagged type while adding finalization Date: Sun, 26 Nov 2017 19:15:49 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <4db43571-7f86-4e73-8849-c41160927703@googlegroups.com> <6496a10f-c97e-4e42-b295-2478ad464b2f@googlegroups.com> <6106dfe6-c614-4fc1-aace-74bf8d7435e3@googlegroups.com> NNTP-Posting-Host: MajGvm9MbNtGBKE7r8NgYA.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.8.2 Xref: feeder.eternal-september.org comp.lang.ada:49166 Date: 2017-11-26T19:15:49+01:00 List-Id: On 2017-11-26 18:33, Jere wrote: > Based on what I have read so far, I didn't see any discussion that would > lead me to think this will be changed at least in the near future. It was discussed on many occasions here in c.l.a. The bottom line is - Ada does not have proper user-defined constructors/destructors and will have none in any observable future. > I wish there was a way it would be easy for vendors to do something like: > > type Some_Type is tagged private; You must always use the Ada.Finalization hack on the parent type. There is no other way safe, and Ada.Finalization is not very safe either when inheritance, task components, or Rosen's trick components are involved. Making controlled components responsible for container's initialization/finalization is inherently unsafe because these will be done in wrong order. The reason is same why any components with Rosen's trick are unsafe. For them there is no right order at all, they must be handled twice at two different stages of initialization/finalization. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de