From: Dmitry A.Kazakov <mailbox@dmitry-kazakov.de>
Subject: Re: OO in Ada
Date: Sun, 6 Oct 2002 23:37:20 +0200
Date: 2002-10-06T23:37:20+02:00 [thread overview]
Message-ID: <anovq3$g6ok9$1@ID-77047.news.dfncis.de> (raw)
In-Reply-To: 3D9F0411.50704@worldnet.att.net
Jim Rogers wrote:
> Dmitry A.Kazakov wrote:
>
>> Jim Rogers wrote:
>>
>>>I disagree here. Ada does not give the illusion of multiple dispatch.
>>>
>> Would "limited multiple dispatch" sound better?
>>
>>>An Ada subprogram can only be primitive to one type. That characteristic
>>>is determined by the place in the source code where the subprogram
>>>interface is defined.
>>
>> This is wrong. Technically you could do it, because type declaration
>> areas [before freezing point] may overlap:
>
> I must again diagree. You are wrong. Section 3.9 paragraph 12 of the Ada
> Reference Manual states:
>
> "A given subprogram shall not be a dispatching operation of two or more
> distinct tagged types."
You missed the point. I didn't challenged this rule. I said that it is
wrong to think that this rule might be a consequence of the rules
controlling the place in the source code where a primitive operation is
allowed to be declared. I showed that this is wrong. For two different
types there can be a place where one could define a primitive operation for
any of them:
>> type A is tagged ...
>> type B is tagged ...
>> procedure Multiple_Dispatch (X : A; Y : B); -- Alas, compilation error
> There is a compilation error. Look at what it says. Gnat 3.14p states
> "operation can be dispatching in only one type."
Yes, but not because of "a primitive operation is declared too late".
That's the point.
> This does not provide any for of multiple dispatch, limited or otherwise.
This does not, because it is illegal. But Ada 95 does have multiple
dispatch, because of:
type A is tagged ...
procedure Multiple_Dispatch (X, Y : A);
This is a case of multiple dispatch because more than one parameter is
dispatching. It is a limited multiple dispatch because:
1. In the dispatch table [note, table, not a vector like in C++! *] of
Multiple_Dispatch only diagonal elements can be overridden. Non-diagonal
elements are final and predefined as raising Constraint_Error.
2. The types associated with the rows and columns of the table have to have
a common ancestor.
(*) Of course, you can implement this table using a vector.
--
Regards,
Dmitry Kazakov
www.dmitry-kazakov.de
next prev parent reply other threads:[~2002-10-06 21:37 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-10-04 2:14 OO in Ada Rick Duley
2002-10-04 2:55 ` Jim Rogers
2002-10-04 17:35 ` Hyman Rosen
2002-10-05 0:20 ` Jim Rogers
2002-10-05 23:38 ` Dmitry A.Kazakov
2002-10-05 15:25 ` Jim Rogers
2002-10-06 21:37 ` Dmitry A.Kazakov [this message]
2002-10-06 2:18 ` Hyman Rosen
2002-10-06 3:00 ` Jim Rogers
2002-10-08 21:08 ` Gisle Sælensminde
2002-10-04 3:37 ` Chad R. Meiners
2002-10-04 5:32 ` Simon Wright
2002-10-04 6:01 ` tmoran
2002-10-04 15:05 ` Matthew Heaney
2002-10-05 2:14 ` SteveD
2002-10-05 8:54 ` Preben Randhol
2002-10-07 14:10 ` Matthew Heaney
2002-10-07 19:52 ` Jeffrey Carter
2002-10-08 21:18 ` Dmitry A.Kazakov
2002-10-08 9:53 ` John McCabe
2002-10-08 15:37 ` Matthew Heaney
2002-10-08 16:47 ` Georg Bauhaus
2002-10-08 17:48 ` Matthew Heaney
2002-10-08 17:16 ` Warren W. Gay VE3WWG
2002-10-08 17:58 ` Matthew Heaney
2002-10-09 16:59 ` Warren W. Gay VE3WWG
2002-10-08 10:21 ` Preben Randhol
-- strict thread matches above, loose matches on Subject: below --
1998-05-15 0:00 Gisle S{lensminde
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox