comp.lang.ada
 help / color / mirror / Atom feed
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



  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