comp.lang.ada
 help / color / mirror / Atom feed
From: Dmitry A. Kazakov <mailbox@dmitry-kazakov.de>
Subject: Re: U : Unbounded_String := "bla bla bla"; (was: Is the Writing...)
Date: Thu, 09 Oct 2003 10:42:05 +0200
Date: 2003-10-09T10:42:05+02:00	[thread overview]
Message-ID: <8i6aov011dia1vsiv3ihsh1kvmul5nlesk@4ax.com> (raw)
In-Reply-To: mailman.53.1065640422.25614.comp.lang.ada@ada-france.org

On Wed,  8 Oct 2003 23:12:35 +0400 (MSD), "Alexandre E. Kopilovitch"
<aek@vib.usr.pu.ru> wrote:

>Dmitry A. Kazakov wrote:
>
>> >  type Y is private envelope of X;
>> >
>> [...]
>>
>> Looks similar to my proposal for defining subtypes.
>
>I think yes, there is much in common, although there is also a difference:
>your proposal is significantly broader; it is certainly heavier as it pertains
>to possible consequences, and I have no immediate opinion whether it will be
>easier to find sound applications for that your proposal than for mine, more
>narrow one.

Yes. I wish Ada's ADT be fully reviewed. Yet, I believe, that it can
remain compatibile to Ada 83.

>> Why to call "envelope" something which is a subtype? (:-))
>
>"subtype" in Ada implies a possibility of some kind of restriction imposed on
>the base type, while the word "envelope" implies some kind of extension (of
>functionality or applicability). You see, for a language terms I strongly
>prefer application/user view to a compilation theory's view, even for advanced
>entities/constructions.

This is the crucial point. Subtype should imply nothing, but
substitutability, in the sense that you can pass objects of the
subtype where the base type is expected. The rest is implementation
details. A subtype can be made either by a specialization (like
constraining) or a generalization (like type extension) or by
providing a completely new implementation (interface inheritance from
a non-abstract type). But all these ways are no more than
implementation details which could be moved to the private part.

>> It should be something like:
>>
>> type Y is private subtype X;
>>
>> Note that for the sake of genericity one need more than two
>> conversions. There should be four:
>>
>> X_From_Y, X_To_Y - this pair is used when an Y gets substituted for X,
>> i.e. when Y *inherits* a subprogram from X. One of these conversions
>> might be absent. Then Y becomes an in-subtype or an out-subtype of X:
>>
>> type Y is private in subtype X;
>>   -- Only in-subroutines are inherited. So only X_From_Y has to be
>>   -- defined
>>
>> Y_From_X, Y_To_X - this pair is used when X gets substituted for Y,
>> i.e. when Y exports something to X. This is a way to create 
>> supertypes.
>>
>> type Y is private in out supertype X:
>
>Well, it seems that your proposal uses basic diagrams while mine is restricted
>to isomorphic representations.

You are poisoned by LSP! (:-))

>> If all four conversions are present both types become fully
>> interchangeable, which is actually required in case String vs.
>> Unbounded_String.
>
>I don't see why two conversions (which provide isomorhic representation)
>aren't enough for String vs. Unbounded_String... if we have no intention to
>extend current functionality (except of making implicit conversions possible).

Because, I do not want isomorhic representations. I want a
fundamentally new, universal concept of subtyping which would cover
all known cases.

For instance, it would work for tagged extensible types. If the
subtype just extends the base (contains it representation), then the
pair of conversions Base_*_Derived are just view conversions, because
Derived has an instance of Base. Another pair Derived_*_Base should
create and destroy a completely new Derived object. Presently the
second pair is outlawed in Ada, so we have only view conversions from
Derived to Base (forth and back). This limits use of tagged types. For
example, they cannot be directly used to implement multiple
representations, I mean the cases when Derived has to be an equivalent
[sub- and supertype] of Base, and not just a subtype.

---
Regards,
Dmitry Kazakov
www.dmitry-kazakov.de



  reply	other threads:[~2003-10-09  8:42 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-02 18:02 U : Unbounded_String := "bla bla bla"; (was: Is the Writing...) amado.alves
2003-10-03  0:05 ` U : Unbounded String : " Alexander Kopilovitch
2003-10-03 20:46   ` Dmitry A. Kazakov
2003-10-03  9:00 ` U : Unbounded_String := " Preben Randhol
2003-10-03 11:17   ` Jeff C,
2003-10-04  2:49     ` Robert I. Eachus
2003-10-06 23:57       ` Alexandre E. Kopilovitch
2003-10-07  8:51         ` Dmitry A. Kazakov
2003-10-08 19:12           ` Alexandre E. Kopilovitch
2003-10-09  8:42             ` Dmitry A. Kazakov [this message]
2003-10-10 20:58               ` Alexander Kopilovitch
2003-10-13  8:35                 ` Dmitry A. Kazakov
2003-10-13 21:43                   ` Alexandre E. Kopilovitch
2003-10-14  8:09                     ` Dmitry A. Kazakov
2003-10-16  9:39                       ` Alexandre E. Kopilovitch
2003-10-18 10:57                         ` Dmitry A. Kazakov
2003-10-08 23:18         ` Robert I. Eachus
2003-10-09 21:35           ` Alexandre E. Kopilovitch
2003-10-10 18:10             ` Robert I. Eachus
2003-10-11 19:43               ` Alexandre E. Kopilovitch
2003-10-12  5:03                 ` Robert I. Eachus
2003-10-13  9:07                   ` Dmitry A. Kazakov
2003-10-13 14:36                   ` Alexandre E. Kopilovitch
2003-10-13 19:46                     ` Robert I. Eachus
2003-10-14  1:35                       ` Jeffrey Carter
2003-10-14 17:11                       ` Alexandre E. Kopilovitch
2003-10-14 20:26                         ` Mark A. Biggar
2003-10-14 20:58                           ` Robert I. Eachus
2003-10-15 16:59                           ` Alexandre E. Kopilovitch
2003-10-15 20:38                             ` (see below)
2003-10-16  0:31                               ` Alexandre E. Kopilovitch
2003-10-16  2:30                                 ` (see below)
2003-10-16 13:54                                   ` Alexandre E. Kopilovitch
2003-10-16 14:11                                     ` (see below)
2003-10-16  8:01                             ` Dmitry A. Kazakov
2003-10-17 20:26                   ` Randy Brukardt
2003-10-17 21:39                     ` Alexandre E. Kopilovitch
2003-10-17 23:03                     ` Robert I. Eachus
2003-10-23 21:11                       ` Alexandre E. Kopilovitch
  -- strict thread matches above, loose matches on Subject: below --
2003-10-03 12:00 amado.alves
2003-10-03 15:54 ` Mark A. Biggar
2003-10-03 20:41 ` Dmitry A. Kazakov
2003-10-03 16:12 amado.alves
2003-10-04 12:16 ` Preben Randhol
replies disabled

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