comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Ada design bug or GNAT bug?
Date: Sat, 4 Jul 2015 14:14:08 +0200
Date: 2015-07-04T14:14:08+02:00	[thread overview]
Message-ID: <1myo335gjwyy3$.1bthq0cugahll.dlg@40tude.net> (raw)
In-Reply-To: mn7isn$ot6$1@loke.gir.dk

On Fri, 3 Jul 2015 22:11:18 -0500, Randy Brukardt wrote:

> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
> news:56pbwdnfce0k$.5et1apcv65k9.dlg@40tude.net...
>> On Fri, 3 Jul 2015 12:33:07 -0500, Randy Brukardt wrote:
>>
>>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>>
>>>> But even if you convert to the class-wide you don't get visibility of 
>>>> the
>>>> operation. In the scenario:
>>>>
>>>>   type T3 is new T1 with private;
>>>> private
>>>>   type T3 is new T2 with null record; -- Legal!
>>>>
>>>> a public client could not convert a T3 object to T2'Class. Could it?
>>>
>>> No, but a private client can, and if you have a public type T4 derived 
>>> from
>>> T3, it would not have the function operation.
>>>
>>> package P2 is
>>>    type T3 is new T1 with private;
>>>    procedure Do_It (X : inT3);
>>> private
>>>    type T3 is new T2 with null record; -- Legal!
>>> end P2;
>>>
>>> with P2;
>>> package P3 is
>>>    type T4 is new P2.T3 with C : Character; end record; -- No defined F 
>>> here.
>>
>> This must be illegal. The compiler shall require (unless T4 is abstract):
>>
>> 1. That the private part of the package had a full view of P2.T3
>>
>> 2. F overridden there.
> 
> But of course that breaks privacy: T4 knows nothing about the full type of 
> T3 or any private operations it may have.

There are a lot of other cases where you effectively unable to derive from
a type. Since they are not counted privacy breach, this one shouldn't
either.

In my view the problem is not in T4 but in T3, like in all other cases when
you would not be able to derive later. So my solution would be a mandatory
declaration of the public view as final. E.g.

package P2 is
   type T3 is new T1 with private; -- Illegal, no derived types possible
private
   type T3 is new T2 with null record;
end P2;

package P2 is
   type T3 is new T1 with private
       with Childless => True; -- Legal, this is the last public descendant
private
   type T3 is new T2 with null record;
end P2;

Now, T4 cannot claim knowing nothing.

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


  reply	other threads:[~2015-07-04 12:14 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-20 18:55 Ada design bug or GNAT bug? Dmitry A. Kazakov
2015-06-21  2:42 ` Randy Brukardt
2015-06-21  6:47   ` Dmitry A. Kazakov
2015-06-22 17:39     ` Randy Brukardt
2015-06-22 18:16       ` Dmitry A. Kazakov
2015-06-23 11:00         ` G.B.
2015-06-23 14:27           ` Dmitry A. Kazakov
2015-06-23 11:45         ` G.B.
2015-06-23 14:30           ` Dmitry A. Kazakov
2015-07-02 22:22         ` Randy Brukardt
2015-07-03  8:02           ` Dmitry A. Kazakov
2015-07-03 17:33             ` Randy Brukardt
2015-07-03 21:34               ` Dmitry A. Kazakov
2015-07-04  3:11                 ` Randy Brukardt
2015-07-04 12:14                   ` Dmitry A. Kazakov [this message]
2015-07-05  0:53                     ` Randy Brukardt
2015-06-22 18:27       ` Shark8
2015-06-23 11:51         ` vincent.diemunsch
2015-06-23 19:55           ` Shark8
2015-06-23 13:06         ` vincent.diemunsch
2015-06-23 14:30           ` David Botton
2015-06-23 15:57             ` Niklas Holsti
2015-06-23 16:01               ` G.B.
2015-06-23 18:05               ` David Botton
2015-06-23 19:38               ` David Botton
2015-06-23 14:38           ` Dmitry A. Kazakov
2015-06-23 16:57             ` Vincent
2015-06-23 17:15               ` Dmitry A. Kazakov
2015-06-23 19:14                 ` vincent.diemunsch
2015-06-23 19:33                   ` Dmitry A. Kazakov
2015-06-23 17:42           ` Jeffrey R. Carter
2015-07-02 22:06           ` Randy Brukardt
2015-07-04  1:52             ` Shark8
2015-07-04  3:24               ` Randy Brukardt
2015-07-04 11:02                 ` Build-in-place semantics? (Was: Ada design bug or GNAT bug?) Jacob Sparre Andersen
2015-07-04 12:15                   ` Dmitry A. Kazakov
2015-07-05  0:45                     ` Randy Brukardt
2015-07-05  7:10                       ` Dmitry A. Kazakov
2015-07-05  0:40                   ` Randy Brukardt
2015-07-04 14:05                 ` Ada design bug or GNAT bug? Bob Duff
2015-07-04  7:46               ` Simon Wright
2015-07-04 12:00                 ` Björn Lundin
2015-07-05  0:48                   ` Randy Brukardt
2015-07-06 12:37             ` Vincent
2015-07-06 20:05               ` Randy Brukardt
2015-07-07  8:06               ` Dmitry A. Kazakov
replies disabled

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