comp.lang.ada
 help / color / mirror / Atom feed
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 09:35:07 +0200
Date: 2018-06-01T09:35:07+02:00	[thread overview]
Message-ID: <peqsvb$1m2h$1@gioia.aioe.org> (raw)
In-Reply-To: 33e69ed1-d4ba-4fd9-9d82-5b7cb1971596@googlegroups.com

On 2018-06-01 01:39 AM, Mehdi Saada wrote:
> The idea was to define for a given (private) type, a series of subtypes with different type invariant, or with or without unknown discriminants (the box), to provide specific variant of the same ADT.

OK, this is a set of related types (though Ada pundits would claim that 
subtype is not a type).

> I know now that is meant to be done through tagged types, and that subtypes are no good for that.

No, you cannot do that with tagged types. These are two different 
type-algebraic operations:

1. subtype creates a new subtype by constraining the base

2. tagged extension creates a new "subtype" by using a set product over 
the original values set

None substitutes another, but you can mix them. They are fully orthogonal.

> But I would have liked a mechanism to generate, why deriving a new type from a parent, these tailored subtypes, with the same same, just like they would have been rewritten.

Deriving creates a new type in a class of types. When you create an Ada 
subtype it is a new member of the class rooted in the base type. When 
you derive from a tagged type T you add a new member to the class rooted 
in T.

What you want is to copy a whole class. It is a second order type 
operation. Ada has two means for that:

1. Type cloning:

    type X is new Y;

This does not work for tagged types and it does not clone subtypes.

2. Generic instantiation.

This works for anything, but imposes severe software design problems.

> But it doesn't take much to see it wasn't a good idea, and that a lot problem would occur... like: what happens when the derived type has constraints or invariants incompatible with subtypes associated with the parent ?

That cannot happen because constraints are inherited. If you need 
another constraint you derive another type.

> I should say "Copying" rather than inheriting. "Copying" constants would fail for the same reason. I/one is better of with converting the constants defined once, for the whole type hierarchy. Though the problem is only with untagged types, tagged private types have class-wide constants.

Both mechanisms copy literals if that is what you meant.

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


  parent reply	other threads:[~2018-06-01  7:35 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 [this message]
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
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