comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Making sense of predicates
Date: Thu, 24 Oct 2013 09:26:38 +0200
Date: 2013-10-24T09:26:38+02:00	[thread overview]
Message-ID: <1ctf5j8x2bm6f.1j39on29020w8.dlg@40tude.net> (raw)
In-Reply-To: l4a65p$8uk$1@loke.gir.dk

On Wed, 23 Oct 2013 23:03:05 -0500, Randy Brukardt wrote:

> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
> news:9vlzla1igu9w$.1ifys2xkaugrn$.dlg@40tude.net...
>> On Mon, 21 Oct 2013 23:35:59 -0500, Randy Brukardt wrote:
>>
>>> It should be one step (only). We'd need something like co-derivation for
>>> that, which might make sense to pursue someday (the main reason would be 
>>> to
>>> get rid of access types altogether, but to do that you need some sort of
>>> handle, like the container cursor -- and clearly you need to be able to
>>> derive the container and its handle together). But that would be a big job
>>> to define properly, it would take the existing inheritance rules and make
>>> them much more complex. (There are already 3 pages of rules associated 
>>> with inheritance for derived types.)
>>
>> It is not only access types. It is relationships between types: Pointer -
>> Target, Array - Index - Element, etc.
> 
> Yes, of course. The idea is that you'd be able to declare any set of types 
> as "co-tagged" or something like that. (I'm thinking on the fly here, so 
> don't read anything much into the names.) Then they'd have to be derived 
> (extended) together as a group.

The problem going this path is that when you derive from a "co-tagged" type
you most likely have to drop its implementation. E.g. a more specific
handle must replace a wider access type in it with a narrower one. This is
why I always suggested interface inheritance from concrete types. That is,
not a type extension, you inherit primitive operations abstract and drop
the representation.

A way to do it through null extension (though more limited in its
capabilities) is what I did in the original post. That requires a mechanism
of propagation constraints from the type down to its components and a
mechanism of static constraining T'Class to a subclass.

Of course constraints propagation could be a benefit elsewhere. E.g.
consider not null access components. They are mostly useless because the
constraint is on the component's type and thus is enforced too early.
Instead of that if we could attach the constraint to its container and let
it propagate to the component, we could postpone first check until
initialization of the container, e.g. until return from Initialize. Which
will make it possible to initialize such components from Initialize and
cleanup in Finalize.

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


  reply	other threads:[~2013-10-24  7:26 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-21 19:51 Making sense of predicates Dmitry A. Kazakov
2013-10-22  4:35 ` Randy Brukardt
2013-10-22  8:19   ` Dmitry A. Kazakov
2013-10-22 12:53     ` Georg Bauhaus
2013-10-22 13:38       ` Dmitry A. Kazakov
2013-10-22 20:38         ` Georg Bauhaus
2013-10-24  4:03     ` Randy Brukardt
2013-10-24  7:26       ` Dmitry A. Kazakov [this message]
2013-10-22  7:14 ` Shark8
2013-10-22  7:35   ` Jacob Sparre Andersen
2013-10-22 17:26     ` Shark8
2013-10-23  7:56       ` Jacob Sparre Andersen
2013-10-24  3:58       ` Randy Brukardt
2013-10-22  8:11   ` Dmitry A. Kazakov
2013-10-22  7:20 ` Jacob Sparre Andersen
2013-10-22  7:57   ` Dmitry A. Kazakov
2013-10-22 14:52     ` Dan'l Miller
2013-10-22 16:30       ` Dmitry A. Kazakov
2013-10-22 17:15         ` Dan'l Miller
2013-10-22 19:26           ` Dmitry A. Kazakov
2013-10-22 19:49             ` J-P. Rosen
2013-10-22 21:30             ` Dan'l Miller
2013-10-23  9:25               ` 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