From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Quick question regarding limited type return syntax
Date: Mon, 4 Aug 2014 14:43:42 +0200
Date: 2014-08-04T14:43:42+02:00 [thread overview]
Message-ID: <1ge2ly0v5yk8d.j8pd98xg0o8v.dlg@40tude.net> (raw)
In-Reply-To: c491psFkt2bU1@mid.individual.net
On Mon, 04 Aug 2014 12:24:19 +0300, Niklas Holsti wrote:
> Controlled types in Ada provide hooks (Initialize/Finalize/Adjust) that
> can be used as constructors and destructors,
Not really. The problem is that they hook too late to be specific type
constructor and too early for a specific type destructor. This is why you
can dispatch from there. The problem arise when you attempt both: use
Initialize as if it were a specific constructor hook and dispatch from it.
> I don't agree that dispatching on a controlled object should be illegal
> until the Initialize operation on that object has been completed.
Then you cannot call Initialize a constructor's hook. These two are
mutually exclusive. You can dispatch not before all specific descendants
are constructed and T'Class itself.
To make it clearer consider what would be the post-condition of Initialize:
type T is ...;
type S is new T ...;
Initialize (X : in out T)
ensure
T'Operational (X)
[*] or, maybe
S'Operational (X)
T'Class'Operational (X)
S'Class'Operational (X)
Now, the precondition of a dispatching call on T'Class is obviously:
require
T'Class'Is_Operational (X)
Of course:
T'Class'Operational (X) => T'Operational (X)
T'Class'Operational (X) => S'Operational (X)
From this you can formally analyse if initialization is correct.
> I believe that such dispatching may be quite useful in some designs,
Yes it is. This is why there must be a hook at the end of construction of
T'Class. The earliest point you can dispatch if when T'Class'Operational
turns true.
> just as re-dispatching is useful in some designs - IMO.
No. This is a totally different case.
> Moreover, I think this question of constructor/destructor control flow
> is separate from the general question of preventing access to
> uninitialized data.
? Initialization = construction. I don't see how are they different.
-----------------
* T'Operational (X) is true when the object X can operate as an instance of
T.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2014-08-04 12:43 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-30 23:51 Quick question regarding limited type return syntax NiGHTS
2014-07-31 0:02 ` Adam Beneschan
2014-07-31 0:56 ` NiGHTS
2014-07-31 0:48 ` Shark8
2014-07-31 1:00 ` NiGHTS
2014-07-31 1:29 ` Adam Beneschan
2014-07-31 1:38 ` NiGHTS
2014-07-31 4:01 ` Shark8
2014-08-01 2:12 ` Randy Brukardt
2014-08-01 3:40 ` Shark8
2014-08-01 7:57 ` J-P. Rosen
2014-08-01 19:23 ` Randy Brukardt
2014-08-01 19:37 ` J-P. Rosen
2014-08-01 20:53 ` Shark8
2014-08-02 7:11 ` Niklas Holsti
2014-08-02 7:34 ` Dmitry A. Kazakov
2014-08-02 13:20 ` Robert A Duff
2014-08-02 13:44 ` Dmitry A. Kazakov
2014-08-02 14:34 ` Robert A Duff
2014-08-02 16:56 ` Dmitry A. Kazakov
2014-08-02 20:35 ` Niklas Holsti
2014-08-03 7:30 ` Dmitry A. Kazakov
2014-08-04 9:24 ` Niklas Holsti
2014-08-04 10:42 ` G.B.
2014-08-04 11:39 ` Peter Chapin
2014-08-04 17:49 ` Niklas Holsti
2014-08-04 11:36 ` Peter Chapin
2014-08-04 12:43 ` Dmitry A. Kazakov [this message]
2014-08-04 16:19 ` G.B.
2014-08-04 16:38 ` Dmitry A. Kazakov
2014-08-04 16:51 ` G.B.
2014-08-04 17:23 ` Dmitry A. Kazakov
2014-08-04 19:37 ` Niklas Holsti
2014-08-05 8:30 ` Dmitry A. Kazakov
2014-08-05 19:24 ` Randy Brukardt
2014-08-03 16:35 ` Robert A Duff
2014-08-02 8:02 ` Jacob Sparre Andersen
2014-08-02 19:20 ` Shark8
2014-08-03 16:07 ` Default values (Was: Quick question regarding limited type return syntax) Jacob Sparre Andersen
2014-08-04 21:29 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox