comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Extending a third party tagged type while adding finalization
Date: Mon, 4 Dec 2017 14:55:18 +0100
Date: 2017-12-04T14:55:18+01:00	[thread overview]
Message-ID: <p03k46$k2v$1@gioia.aioe.org> (raw)
In-Reply-To: c9805932-476c-43b4-a56b-7b3853ee44a9@googlegroups.com

On 04/12/2017 14:19, AdaMagica wrote:

> There is no Initialize defined for derived S. This is defined then implicitly as:
> 
>    procedure Initialize (X: in out S) is
>    begin
>      Initialize (T (X));
>    end Initialize;
> 
> This is the calling sequence:
> Init S
> Init T
> Foo  S

Which is a wrong sequence per Ada design. Actually it is just

    Initialize of S

This wrong sequence is fixed in practice by applying the pattern:

    procedure Initialize (X : in out Derived) is
    begin
       Parent (X).Initialize; -- Ensure parent's initialization
       <do user initialization of Derived>
    end Initialize;

Using the pattern you get a semantically correct sequence:

       -- enter Initialize of S
       --   enter Initialize of T
    <do user initialization of T>
       --   leave Initialize of T
    <do user initialization of S>
       -- leave Initialize of S

But with Foo it becomes wrong again:

    <do user initialization of T> + call Foo of S
    <do user initialization of S>

Which is catastrophic and there is *no* way to make it right in presence 
of multiple derived types. You cannot announce a call to a deferred 
implementation during initialization of a specific type T. That may 
happen only after initializations of all derived specific types are 
complete.

Semantically it means that it must be called in the initialization of 
T'Class. The proper sequence must be:

    <do user initialization of T>
    <do user initialization of S>
    <do user initialization of S'Class>
    <do user initialization of T'Class> + call Foo of S

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


  reply	other threads:[~2017-12-04 13:55 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-22 12:43 Extending a third party tagged type while adding finalization Jere
2017-11-22 16:42 ` AdaMagica
2017-11-26 17:33   ` Jere
2017-11-26 18:15     ` Dmitry A. Kazakov
2017-11-26 19:31       ` Jere
2017-11-27  9:46     ` AdaMagica
2017-11-27 12:56       ` Jere
2017-11-27 15:00         ` AdaMagica
2017-11-27 16:38           ` Jere
2017-11-27 18:37             ` AdaMagica
2017-11-27 19:53               ` Jere
2017-11-28 11:48                 ` AdaMagica
2017-12-03  2:22                   ` Jere
2017-12-03 21:53               ` Robert Eachus
2017-12-04  7:58                 ` Dmitry A. Kazakov
2017-12-04 14:59                   ` Robert Eachus
2017-12-04 15:39                     ` Dmitry A. Kazakov
2017-11-27 18:10     ` Shark8
2017-11-27 19:56       ` Jere
2017-11-28  1:55       ` Randy Brukardt
2017-12-03  2:47         ` Jere
2017-12-03  9:29           ` Dmitry A. Kazakov
2017-12-03 15:10             ` AdaMagica
2017-12-03 16:39               ` Dmitry A. Kazakov
2017-12-03 19:34             ` AdaMagica
2017-12-03 19:41               ` Dmitry A. Kazakov
2017-12-04 12:38                 ` AdaMagica
2017-12-04 13:19                   ` AdaMagica
2017-12-04 13:55                     ` Dmitry A. Kazakov [this message]
2017-12-04 15:44                       ` AdaMagica
2017-12-04 16:19                         ` Dmitry A. Kazakov
2017-12-04 20:54           ` Randy Brukardt
2017-12-04 21:02             ` Dmitry A. Kazakov
2017-12-05 21:09               ` Randy Brukardt
2017-12-05 21:29                 ` Dmitry A. Kazakov
2017-12-07  1:13                   ` Randy Brukardt
2017-12-07  8:36                     ` Dmitry A. Kazakov
2017-12-07 23:22                       ` Randy Brukardt
2017-12-08  9:30                         ` Dmitry A. Kazakov
2017-12-09  0:17                           ` Randy Brukardt
2017-12-11  9:03                             ` Dmitry A. Kazakov
2017-12-11 22:42                               ` Randy Brukardt
2017-12-12 16:11                                 ` AdaMagica
2017-12-12 20:08                               ` G. B.
2017-12-12 20:32                                 ` Dmitry A. Kazakov
replies disabled

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