From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Your wish list for Ada 202X
Date: Fri, 18 Apr 2014 23:18:12 +0200
Date: 2014-04-18T23:18:12+02:00 [thread overview]
Message-ID: <129pvrzqrv83p$.orkstybnskgo.dlg@40tude.net> (raw)
In-Reply-To: brdblmFhio6U1@mid.individual.net
On Fri, 18 Apr 2014 22:10:50 +0300, Niklas Holsti wrote:
> (Apologies for a delayed reply.)
>
> On 14-04-14 00:07 , Dmitry A. Kazakov wrote:
>> On Sun, 13 Apr 2014 22:43:47 +0300, Niklas Holsti wrote:
>>
>>> On 14-04-12 11:20 , Dmitry A. Kazakov wrote:
>>
>>>> I don't deny
>>>> existence of the problem. I am against the solution, which is inherently
>>>> unsafe and constraining (precludes by-copy semantics).
>>>
>>> But class-wide operations which contain dispatching calls also preclude
>>> by-copy semantics, don't they?
>>
>> Not at all. There is no problem for a class-wide operation to act on
>> by-copy types.
>>
>> A by-copy class-wide object is a tuple (tag, type-specific value). Upon
>> dispatch the value is passed copy-in/copy-out to the type specific
>> operation.
>
> OK, but from the implementation point of view, that form of by-copy
> passing could be used for all operations of a tagged class, whether
> class-wide or primitive, with or without redispatching. So it is not
> evident why you said earlier that redispatching prevents by-copy semantics.
Re-dispatching presumes the same object. For by-copy objects a conversion
of T to T'Class would produce a new object on which dispatch would happen.
It would make no sense to call this re-dispatch.
But more importantly is that "re-dispatch" will always dispatch to the
operations of the manifested type. I will consider this in details below.
> If I may guess, your reasoning is perhaps that if we have a tagged type
> T, and a derived type TT with added components, and a primitive
> operation Foo on T which is inherited by TT and uses by-copy semantics,
> then calling Foo on a TT object X should really copy only the T part of
> X, and therefore Foo could not execute a redispatching call to some
> operation Bar on T which is overridden for TT, because the conversion
> T'Class(X) in the redispatching call would have no way to (re)generate
> the TT components of X, because they were not copied.
>
> I think that argument is wrong from the formal point of view, because
> when Foo is inherited from T to TT, the inherited operation formally
> acts on TT, therefore the by-copy passing would copy all of X, including
> the TT components.
Consider this:
type T is non-tagged null record;
procedure Foo (X : T);
procedure Bar (X : T);
type TT is new T with record
I : Integer;
end record;
overriding procedure Bar (X : T);
procedure Foo (X : T) is
begin
T'Class (X).Bar;
end Foo;
O : T'Class := T'(null record);
O.Foo;
The representation of O is (T'Tag, null record). When it dispatches on O to
Foo, T'Tag is stripped away and null record is passed to T's Foo. Within
Foo X has the representation null record, *always*. When X is converted in
Foo to T'Class, the result is (T'Tag, null record), because the type of X
is declared as T. When it dispatches on the result Bar, it is T's Bar that
is called, always, because the tag is T'Tag.
As you see, there is no re-dispatch possible with by-copy semantics.
Re-dispatch requires:
1. by-reference semantics (no new objects)
2. extension (parent representations stored within derived objects)
3. embedded tags (class-wide and type-specific representations to be same)
> Another case that comes to mind is an explicit call to the original (not
> inherited) form of Foo, using a call with a conversion of the form
> Foo(T(X)) where X is of type TT. Here, there is more reason to feel that
> by-copy passing should copy only the T part of X (or, rather, the
> conversion should return only the T part of X), and then redispatching
> from Foo would indeed be impossible. But if T(X) is seen simply as a
> view conversion, not a value conversion, then X could still be passed
> by-copy using your (tag, type-specific value) form.
It is the tag in the pair (Tag, Value) which determine the type of Value.
You cannot use T'Tag with TT value, that is inconsistent.
>>> A class-wide operation, in my view, is just like a primitive operation
>>> except that (1) (re-)dispatching is implicit and automatic for all calls
>>> to primitive operations of the parameter object (because the parameter
>>> is a class-wide type) and (2) the operation cannot be overridden.
>>
>> There is no re-dispatching in a class-wide operation. It is defined on
>> class-wide objects, so it simply neither dispatch nor re-dispatch.
>
> Huh? If a class-wide operation calls a primitive operation, using a
> controlling parameter of the class-wide type, that is certainly a
> dispatching call.
Yes, but this is a call to some different operation. I thought you were
talking about the class-wide operation itself. This operation does not
[re-]dispatch. What happens in its body is a different issue.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2014-04-18 21:18 UTC|newest]
Thread overview: 240+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-25 21:41 Your wish list for Ada 202X Stoik
2014-03-25 22:14 ` Simon Wright
2014-03-26 6:25 ` Shark8
2014-03-26 20:41 ` Randy Brukardt
2014-03-27 9:20 ` Shark8
2014-03-27 21:50 ` Randy Brukardt
2014-03-28 1:54 ` Jeffrey Carter
2014-03-28 8:17 ` Dmitry A. Kazakov
2014-03-28 21:27 ` Randy Brukardt
2014-03-29 9:44 ` Dmitry A. Kazakov
2014-03-31 23:55 ` Randy Brukardt
2014-04-01 8:20 ` Dmitry A. Kazakov
2014-04-01 10:51 ` G.B.
2014-04-01 12:40 ` Dmitry A. Kazakov
2014-04-02 22:39 ` Randy Brukardt
2014-04-03 2:59 ` Shark8
2014-04-05 11:10 ` Dmitry A. Kazakov
2014-04-08 1:15 ` Randy Brukardt
2014-04-08 9:15 ` Dmitry A. Kazakov
2014-04-08 10:15 ` G.B.
2014-04-08 10:56 ` Dmitry A. Kazakov
2014-04-08 23:37 ` Randy Brukardt
2014-04-09 10:40 ` Dmitry A. Kazakov
2014-04-10 3:28 ` Randy Brukardt
2014-04-10 8:42 ` Georg Bauhaus
2014-04-10 21:52 ` Randy Brukardt
2014-04-10 15:31 ` Dmitry A. Kazakov
2014-04-10 22:08 ` Randy Brukardt
2014-04-11 6:20 ` Dmitry A. Kazakov
2014-04-11 21:34 ` Randy Brukardt
2014-04-10 22:39 ` Randy Brukardt
2014-04-11 6:40 ` Dmitry A. Kazakov
2014-04-11 21:44 ` Randy Brukardt
2014-04-12 8:45 ` Dmitry A. Kazakov
2014-04-14 23:39 ` Randy Brukardt
2014-04-15 7:55 ` Dmitry A. Kazakov
2014-04-15 21:27 ` Randy Brukardt
2014-04-16 7:52 ` Dmitry A. Kazakov
2014-04-16 21:53 ` Randy Brukardt
2014-04-17 7:39 ` Dmitry A. Kazakov
2014-04-17 17:29 ` Randy Brukardt
2014-04-17 19:54 ` Dmitry A. Kazakov
2014-04-11 19:04 ` Niklas Holsti
2014-04-11 20:43 ` Dmitry A. Kazakov
2014-04-11 22:04 ` Niklas Holsti
2014-04-12 8:20 ` Dmitry A. Kazakov
2014-04-12 8:39 ` Nasser M. Abbasi
2014-04-12 9:38 ` Dmitry A. Kazakov
2014-04-12 9:55 ` Georg Bauhaus
2014-04-12 10:45 ` Dmitry A. Kazakov
2014-04-14 23:45 ` Randy Brukardt
2014-04-12 10:17 ` Nasser M. Abbasi
2014-04-12 10:48 ` Dmitry A. Kazakov
2014-04-13 19:43 ` Niklas Holsti
2014-04-13 21:07 ` Dmitry A. Kazakov
2014-04-18 19:10 ` Niklas Holsti
2014-04-18 21:18 ` Dmitry A. Kazakov [this message]
2014-04-19 7:35 ` Niklas Holsti
2014-04-19 8:19 ` Dmitry A. Kazakov
2014-04-19 8:39 ` Dmitry A. Kazakov
2014-04-19 9:08 ` Niklas Holsti
2014-04-19 10:06 ` Dmitry A. Kazakov
2014-04-19 13:53 ` Niklas Holsti
2014-04-19 14:21 ` Dmitry A. Kazakov
2014-04-19 18:28 ` Niklas Holsti
2014-04-19 9:05 ` Niklas Holsti
2014-04-19 10:18 ` Dmitry A. Kazakov
2014-04-15 0:08 ` Randy Brukardt
2014-04-15 7:21 ` Natasha Kerensikova
2014-04-15 21:20 ` Randy Brukardt
2014-04-16 6:32 ` Niklas Holsti
2014-04-16 7:24 ` Natasha Kerensikova
2014-04-16 7:31 ` Dmitry A. Kazakov
2014-04-16 9:30 ` Redispatching (was: Your wish list for Ada 202X) J-P. Rosen
2014-04-16 19:53 ` Redispatching Niklas Holsti
2014-04-17 7:26 ` Redispatching Dmitry A. Kazakov
2014-04-17 8:22 ` Redispatching Georg Bauhaus
2014-04-18 20:08 ` Redispatching Niklas Holsti
2014-04-18 20:51 ` Redispatching Dmitry A. Kazakov
2014-04-19 9:17 ` Redispatching Georg Bauhaus
2014-04-19 10:58 ` Redispatching Dmitry A. Kazakov
2014-04-19 11:21 ` Redispatching Georg Bauhaus
2014-04-17 8:53 ` Redispatching J-P. Rosen
2014-04-16 21:44 ` Your wish list for Ada 202X Niklas Holsti
2014-04-16 22:27 ` Randy Brukardt
2014-04-18 19:59 ` Niklas Holsti
2014-04-18 21:28 ` Randy Brukardt
2014-04-19 8:14 ` Niklas Holsti
2014-04-21 23:09 ` Randy Brukardt
2014-04-22 6:08 ` Niklas Holsti
2014-04-22 8:02 ` Dmitry A. Kazakov
2014-04-22 8:30 ` Shark8
2014-04-22 9:14 ` Dmitry A. Kazakov
2014-04-22 23:23 ` Randy Brukardt
2014-04-23 7:45 ` Dmitry A. Kazakov
2014-04-23 19:43 ` Shark8
2014-04-23 20:00 ` Dmitry A. Kazakov
2014-04-23 21:28 ` Shark8
2014-04-24 7:30 ` Dmitry A. Kazakov
2014-04-24 15:20 ` Shark8
2014-04-24 16:19 ` Dmitry A. Kazakov
2014-04-24 16:50 ` Shark8
2014-04-24 16:57 ` Dmitry A. Kazakov
2014-04-19 10:02 ` Georg Bauhaus
2014-03-27 22:06 ` Randy Brukardt
2014-03-28 5:23 ` Shark8
2014-03-26 8:17 ` Dmitry A. Kazakov
2014-03-26 9:02 ` J Kimball
2014-03-26 9:27 ` Dmitry A. Kazakov
2014-03-26 10:30 ` Marius Amado-Alves
2014-03-26 15:11 ` G.B.
2014-03-26 21:55 ` Simon Clubley
2014-03-26 15:03 ` G.B.
2014-03-26 22:00 ` Simon Clubley
2014-03-26 16:01 ` Anh Vo
2014-03-26 17:04 ` Dmitry A. Kazakov
2014-03-27 15:03 ` Dan'l Miller
2014-03-27 16:02 ` Dmitry A. Kazakov
2014-03-26 16:17 ` Stoik
2014-03-26 17:15 ` Dmitry A. Kazakov
2014-03-26 18:04 ` G.B.
2014-03-26 18:47 ` Simon Wright
2014-03-26 19:51 ` Georg Bauhaus
2014-03-27 14:43 ` Jacob Sparre Andersen
2014-03-27 22:50 ` Randy Brukardt
2014-03-28 5:22 ` J-P. Rosen
2014-03-28 7:54 ` Jacob Sparre Andersen
2014-03-28 21:22 ` Randy Brukardt
2014-03-26 21:06 ` Randy Brukardt
2014-03-26 23:15 ` J Kimball
2014-03-27 8:26 ` Dmitry A. Kazakov
2014-03-27 10:54 ` Georg Bauhaus
2014-03-27 15:42 ` Dmitry A. Kazakov
2014-03-27 21:35 ` Randy Brukardt
2014-04-29 14:26 ` Tero Koskinen
2014-04-29 15:39 ` Dan'l Miller
2014-04-29 17:10 ` Simon Clubley
2014-04-29 17:13 ` Tero Koskinen
2014-04-29 19:42 ` Simon Clubley
2014-03-30 12:28 ` francois_fabien
2014-03-30 13:40 ` Luke A. Guest
2014-03-30 14:24 ` Simon Clubley
2014-03-30 18:48 ` Luke A. Guest
2014-03-30 19:22 ` Dmitry A. Kazakov
2014-03-30 14:28 ` Simon Clubley
2014-03-30 15:14 ` Peter Chapin
2014-03-30 18:48 ` Luke A. Guest
2014-03-30 18:48 ` Luke A. Guest
2014-03-30 23:41 ` Simon Clubley
2014-03-31 15:39 ` Adam Beneschan
2014-03-30 13:46 ` Simon Clubley
2014-03-30 19:02 ` Pascal Obry
2014-03-30 19:33 ` Dmitry A. Kazakov
2014-03-30 19:59 ` Pascal Obry
2014-03-31 15:13 ` Stoik
2014-03-31 16:22 ` Pascal Obry
2014-03-31 16:47 ` Pascal Obry
2014-03-31 18:59 ` Dmitry A. Kazakov
2014-04-05 8:28 ` Pascal Obry
2014-04-05 11:06 ` Georg Bauhaus
2014-04-05 11:20 ` Pascal Obry
2014-04-02 16:21 ` Britt
2014-04-02 22:53 ` Randy Brukardt
2014-04-03 0:01 ` Jeffrey Carter
2014-04-03 5:51 ` Pascal Obry
2014-04-03 6:27 ` Jeffrey Carter
2014-04-03 17:18 ` Pascal Obry
2014-04-03 19:11 ` Dan'l Miller
2014-04-03 19:18 ` Dan'l Miller
2014-04-03 21:17 ` Randy Brukardt
2014-04-04 0:29 ` Jeffrey Carter
2014-04-04 8:20 ` Stefan.Lucks
2014-04-04 19:52 ` J Kimball
2014-04-04 20:43 ` Randy Brukardt
2014-04-04 20:54 ` Shark8
2014-04-04 21:47 ` Luke A. Guest
2014-04-08 0:47 ` Randy Brukardt
2014-04-08 4:43 ` J Kimball
2014-04-08 5:25 ` Jeffrey Carter
2014-04-08 23:44 ` Randy Brukardt
2014-04-04 20:53 ` Randy Brukardt
2014-04-04 23:25 ` Jeffrey Carter
2014-04-03 6:30 ` Georg Bauhaus
2014-04-03 0:06 ` Britt
2014-04-03 15:15 ` Robert A Duff
2014-04-03 20:19 ` Qun-Ying
2014-04-03 22:56 ` Robert A Duff
2014-04-04 18:31 ` Dan'l Miller
2014-04-04 21:08 ` Randy Brukardt
2014-04-05 3:39 ` Peter Chapin
2014-04-04 20:27 ` Shark8
2014-04-14 4:59 ` J Kimball
2014-04-14 6:54 ` Shark8
2014-04-15 0:22 ` Randy Brukardt
2014-04-15 0:18 ` Randy Brukardt
2014-04-15 5:28 ` J Kimball
2014-04-14 22:36 ` Shark8
2014-04-15 8:41 ` J-P. Rosen
2014-04-18 0:55 ` Robert Love
2014-04-18 11:39 ` Simon Wright
2014-04-23 12:55 ` björn lundin
2014-04-23 13:57 ` J-P. Rosen
2014-04-23 14:32 ` björn lundin
2014-04-23 15:43 ` J-P. Rosen
2014-04-23 16:31 ` björn lundin
2014-04-23 16:42 ` J-P. Rosen
2014-04-23 17:51 ` björn lundin
2014-04-23 21:29 ` Pascal Obry
2014-04-23 22:00 ` J-P. Rosen
2014-04-23 23:48 ` Shark8
2014-04-24 5:28 ` J-P. Rosen
2014-04-23 20:11 ` Randy Brukardt
2014-04-23 20:03 ` Randy Brukardt
2014-04-24 9:08 ` björn lundin
2014-04-23 18:02 ` Jeffrey Carter
2014-04-23 20:14 ` Randy Brukardt
2014-04-24 9:16 ` björn lundin
2014-04-24 11:33 ` G.B.
2014-04-24 12:11 ` björn lundin
2014-04-24 12:32 ` G.B.
2014-04-23 14:38 ` Dmitry A. Kazakov
2014-04-23 15:46 ` J-P. Rosen
2014-04-23 16:27 ` Dmitry A. Kazakov
2014-04-23 16:40 ` J-P. Rosen
2014-04-23 17:39 ` Dmitry A. Kazakov
2014-04-23 21:40 ` J-P. Rosen
2014-04-24 7:42 ` Dmitry A. Kazakov
2014-04-24 9:18 ` J-P. Rosen
2014-04-23 14:06 ` Dmitry A. Kazakov
2014-04-23 14:44 ` björn lundin
2014-04-23 20:28 ` Randy Brukardt
2014-04-24 10:31 ` björn lundin
2014-04-25 1:22 ` Randy Brukardt
2014-04-25 2:19 ` Shark8
2014-04-25 7:31 ` Dmitry A. Kazakov
2014-04-23 14:58 ` björn lundin
2014-04-23 18:05 ` Jeffrey Carter
2014-04-23 19:48 ` Shark8
2014-04-24 9:03 ` G.B.
2014-04-25 1:27 ` 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