comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Dispatch on the result still does not work?
Date: Sun, 12 Jul 2009 13:30:35 +0200
Date: 2009-07-12T13:30:36+02:00	[thread overview]
Message-ID: <hreforvp5wkf$.1vi542qc6bh51$.dlg@40tude.net> (raw)
In-Reply-To: 74j6m.69502$rO.69160@newsfe13.ams2

On Sun, 12 Jul 2009 11:40:27 +0100, Chris Moore wrote:

> Dmitry A. Kazakov wrote:
>> On Sat, 11 Jul 2009 20:54:05 +0200, Georg Bauhaus wrote:
>> 
>>> Dmitry A. Kazakov wrote:
>> 
>>>> Considering this one:
>>>> I would expect it rather dispatching on the tag of X, i.e. selecting Value,
>>>> which returns S.
>>> Another one, I don't like to call this a solution,
>>> and the running program differs per compiler
>>> used. But both compilers compile the units without errors:
>> [...]
>> 
>> I am not sure that it indeed should be resolved. The question is whether
>> there exist or should exist cases where one could indeed dispatch on the
>> result's type. The construct with assignment was admittedly artificial, it
>> was first that came to mind.
>> 
> 
> But the results type is T'Class.  It is not S.

Exactly. To be of T'Class is a prerequisite for dispatch.

> The original object to
> which X refers is of type S.

Therefore it could dispatch using S'Tag.

> But this is destroyed prior to the
> assignment of the value returned by Value.

This is an implementation detail.

>  This can be either S or T.

No, if you drag this detail on the surface, then it is strictly neither,
because the object has been destroyed, and there is nothing in there. In
this case writing anything into the object is a type error.

To put it short assignment /= initialization. Assignment is indivisible
without breaking the type system.

Further depending on how assignment is annotated, considering it a
procedure or as finalization + initialization by a function, etc, one can
come different conclusions whether it should dispatch or not. For example
it can be annotated as

   procedure (Left, Right : T); -- doubly-dispatching, primitive

or

   procedure (Left : T'Class; Right : T);  -- primitive

or

   procedure (Left : T'Class; Right : T'Class);  -- class-wide

etc.

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



  reply	other threads:[~2009-07-12 11:30 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-11 10:04 Dispatch on the result still does not work? Dmitry A. Kazakov
2009-07-11 11:09 ` Chris Moore
2009-07-11 12:05   ` Dmitry A. Kazakov
2009-07-11 17:50     ` Chris Moore
2009-07-11 19:22       ` Dmitry A. Kazakov
2009-07-11 11:32 ` Hibou57 (Yannick Duchêne)
2009-07-11 12:20   ` Dmitry A. Kazakov
2009-07-11 13:36     ` Hibou57 (Yannick Duchêne)
2009-07-11 13:39       ` Hibou57 (Yannick Duchêne)
2009-07-11 15:19       ` Dmitry A. Kazakov
2009-07-11 18:08         ` Hibou57 (Yannick Duchêne)
2009-07-11 19:29           ` Dmitry A. Kazakov
2009-07-11 23:22             ` Hibou57 (Yannick Duchêne)
2009-07-12  9:46               ` Dmitry A. Kazakov
2009-07-11 18:54 ` Georg Bauhaus
2009-07-11 19:40   ` Dmitry A. Kazakov
2009-07-12 10:40     ` Chris Moore
2009-07-12 11:30       ` Dmitry A. Kazakov [this message]
2009-07-12 16:05         ` Chris Moore
2009-07-12 16:38           ` Dmitry A. Kazakov
2009-07-12 17:11             ` AdaMagica
2009-07-12 20:30               ` sjw
2009-07-13 16:55                 ` Adam Beneschan
2009-07-13 21:47                   ` sjw
2009-07-13 22:50                     ` Adam Beneschan
2009-07-14 21:06                       ` sjw
2009-07-13 15:13 ` Adam Beneschan
2009-07-13 15:17   ` Adam Beneschan
2009-07-13 16:33     ` AdaMagica
2009-07-13 18:46   ` Adam Beneschan
replies disabled

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