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, 3 Dec 2017 10:29:02 +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> <24767ee5-cda8-45e4-98d1-7da44757bd40@googlegroups.com> <037e7f02-9149-4648-b7c5-91f67c1c1961@googlegroups.com> 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: 7bit 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:49326 Date: 2017-12-03T10:29:02+01:00 List-Id: On 2017-12-03 03:47, Jere wrote: > Well, I am definitely not advocating that all tagged types need to be > controlled. Certainly all types must be, including scalars, arrays, tasks and class-wide types. Having class-wide initialization and finalization is essential if there are task components or class-wide access components (Rosen's trick): type T is new Ada.Finalization.Controlled with record Self : not null access T'Class; end record; procedure Initialize (X : in out T); procedure Foo (X : in out T) is abstract; type S is new T with ... overriding procedure Foo (X : in out S); procedure Initialize (X : in out T) is begin X.Self.Foo; -- Boom! end Initialize; Dispatching calls must be illegal during type-specific initialization/finalization. They are OK after these in the class-wide initialization or before in the class-wide finalization. > I was just musing about whether there was a different way > to do it. Yes, there is no need to keep lists of objects. It is enough to have only static analysis to decide what kind of finalization to call. Nobody cares about finalization of implicitly collected objects, it is a bug anyway. > The Ada Finalization method is very clunky and can be > limiting at times. There may not be a better way to do it. At the > end of the day, I find a lot of the errors our programmers make is > forgetting to put in a Create/Intialize or Clean_Up/Finalize call > on objects that do not have Controlled ancestors. It's a > maintenance headache, so I look for ways to try to remedy that via > design. Welcome in the club. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de