From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: about inheritance of subtypes and entities (such as constants) related to a type in the same package
Date: Fri, 1 Jun 2018 17:27:50 +0200
Date: 2018-06-01T17:27:50+02:00 [thread overview]
Message-ID: <peroll$1aeh$1@gioia.aioe.org> (raw)
In-Reply-To: 2968eca4-8f5a-4480-967b-1488a6c054fa@googlegroups.com
On 2018-06-01 16:01, Dan'l Miller wrote:
> On Friday, June 1, 2018 at 2:56:55 AM UTC-5, Dmitry A. Kazakov wrote:
>> On 2018-05-31 11:10 PM, Dan'l Miller wrote:
>>> On Thursday, May 31, 2018 at 2:59:48 PM UTC-5, Dmitry A. Kazakov wrote:
>>>> On 2018-05-31 20:53, Dan'l Miller wrote:
>>>>> On Thursday, May 31, 2018 at 12:37:07 PM UTC-5, Dmitry A. Kazakov wrote:
>>>>>> On 2018-05-31 04:29 PM, Dan'l Miller wrote:
>>>>>>> Conversely, subtyping in Ada does none of that type-extension stuff: no
>>>>>>> additional data/cardinality-of-the-members-of-the-set, no additional
>>>>>> > routines/behavior, no arbitrary refinement of behavior of overridden/copied
>>>>>>> routines/operations. Instead, subtyping in Ada is strictly subjecting the
>>>>>>> parent type to an additional membership-narrowing predicate, such as subset
>>>>>> > in set theory. Randy likewise spoke of membership on other branches of this
>>>>>> > thread.
>>>>>>
>>>>>> Untrue. Ada 83 subtyping extends the supertype (base type), because it
>>>>>> exports operations defined on the subtype to the base type. Ada 83
>>>>>> subtyping introduces an equivalent type, which is both sub- and
>>>>>> supertype of the base.
>>>>>
>>>>> If Ada83 untagged subtyping is type extension, please provide even a single characteristic that was extended/added/supplemented instead of contracted/subtracted/elided by the predicate.
>>>>
>>>> Elementary:
>>>>
>>>> subtype Extension is Integer;
>>>> procedure Extended_Operation (X : Extension) is null;
>>>> X : Integer;
>>>> Y : Extension;
>>>> begin
>>>> Extended_Operation (X); -- See #1
>>>> Extended_Operation (Y); -- See #2
>>>
>>> There is exactly one procedure Extended_Operation, which despite its cleverly-deceptive name is not a demonstration of type extension: We start with having a single procedure that takes X as a parameter and that is precisely where we end: no new procedure for Y, no additional storage for Y beyond Y's Xness, no new outcome in the execution of that procedure when passed a Y (except enforcement of the [unfortunately-missing] predicate as a post-condition).
>>
>> Interface was extended. Implementation details as to how many bodies
>> there will be used are irrelevant.
>>
>>> Or in fewer words: nothing about Y is X-plus-more. There is no "more" there.
>>> (not even a predicate to enforce, which would have made this example a tad juicier).
>>>
>>>> The subtype Extension extends Integer with Extended_Operation, which has
>>>> two separate meanings:
>>>>
>>>> 1. The base type Integer has now a new operation:
>>>>
>>>> new Integer interface = old Integer interface + Extended_Operation
>>>>
>>>> 2. The subtype Extension extends inherited Integer's set of operations:
>>>>
>>>> Extended interface = old Integer interface + Extended_Operation
>>>
>>> Invoking the same subprogram
>>
>> Same to what? The interface of Integer as defined by the standard does
>> not have Extended_Operation. How is it same?
>
> (How clever that you snipped my already-existing answer to your question at precisely the word where it becomes the inconvenient answer. The elided original answer is restored as the next quotation below.)
>
> Extended_Operation is merely invoked twice. Extended_Operation is •the same• as itself, regardless if passed X as an argument or passed Y as an argument.
But X and Y are declared of different subtypes. How can it be same?
> If Extended_Operation were named GiveTheKidABath instead, it would be obvious to all readers that giving two kids {X, Y} a bath, does not extend Y by growth and does not extend the size of the family by birthing more babies. Nothing whatsoever was extended by invoking Extended_Operation against both X and Y. Despite its cleverly-deceptive name (and despite invoking that subprogram twice), there is no extension whatsoever in Y beyond Y's Xness. If Y was declared with a predicate, then Y would actually demonstrate some contraction of Xness. Contraction (smaller domain) is not extension (bigger size or bigger mission) either.
Again, Integer does not have Extended_Operation. Try this:
procedure Test is
X : Integer;
begin
Extended_Operation (X);
end Test;
does it compile? No.
procedure Test is
subtype Extension is Integer;
procedure Extended_Operation (X : Extension) is null;
X : Integer;
begin
Extended_Operation (X);
end Test;
Does it compile now? Yes.
What happened with the Integer type?
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2018-06-01 15:27 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-26 16:14 about inheritance of subtypes and entities (such as constants) related to a type in the same package Mehdi Saada
2018-05-26 16:44 ` Mehdi Saada
2018-05-29 22:07 ` Randy Brukardt
2018-05-29 22:12 ` Randy Brukardt
2018-05-30 8:13 ` Dmitry A. Kazakov
2018-05-30 19:25 ` Randy Brukardt
2018-05-30 19:45 ` Dmitry A. Kazakov
2018-05-30 19:59 ` Randy Brukardt
2018-05-31 8:44 ` Dmitry A. Kazakov
2018-05-31 22:48 ` Randy Brukardt
2018-05-31 23:39 ` Mehdi Saada
2018-06-01 2:50 ` Shark8
2018-06-01 7:35 ` Dmitry A. Kazakov
2018-05-30 20:53 ` Dan'l Miller
2018-05-31 8:54 ` Dmitry A. Kazakov
2018-05-31 14:29 ` Dan'l Miller
2018-05-31 14:38 ` Dan'l Miller
2018-05-31 17:37 ` Dmitry A. Kazakov
2018-05-31 18:53 ` Dan'l Miller
2018-05-31 19:59 ` Dmitry A. Kazakov
2018-05-31 21:10 ` Dan'l Miller
2018-06-01 7:56 ` Dmitry A. Kazakov
2018-06-01 14:01 ` Dan'l Miller
2018-06-01 15:27 ` Dmitry A. Kazakov [this message]
2018-05-31 22:45 ` Randy Brukardt
2018-05-31 23:50 ` Dan'l Miller
2018-06-01 7:38 ` Dmitry A. Kazakov
2018-05-31 22:34 ` 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