comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Making sense of predicates
Date: Mon, 21 Oct 2013 23:35:59 -0500
Date: 2013-10-21T23:35:59-05:00	[thread overview]
Message-ID: <l44vbf$6q0$1@loke.gir.dk> (raw)
In-Reply-To: myuy19txq4vq.6xym4vrt6irl.dlg@40tude.net

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:myuy19txq4vq.6xym4vrt6irl.dlg@40tude.net...
> Considering this:
>
>   type T is tagged null record;
>   procedure P (X : T);
>
>   type S is new T with null record;
>   procedure Q (X : T);
>
>   subtype Subclass is T'Class with
>      Dynamic_Predicate => Subclass in S'Class;
>      -- Should have been Static_Predicate, but illegal
>
> Now:
>
>   X : Subclass := S'(null record);
> begin
>   X.P;
>   X.Q; -- Illegal
>
> Well, predicates were not supposed to work in an intelligent way, so why
> not to add a kind that will?

They're plenty intellegent: they're purely a runtime check, just like a 
constraint. If you don't want a runtime check, don't use 'em. You want a new 
kind of type, which is something very different.

> There are number of cases where this would be very useful. E.g. smart
> pointers:
>
>   type T1 is tagged ...;
>   type T1_Ptr is access all T1'Class;
>   type H1 is new Ada.Finalization.Controlled with record -- Handle type
>       Ptr : T1_Ptr;
>   end record;
>
>   type T2 is new T1 with ...;
>
> Presently it is impossible to derive H2 from H1 constrained to point to
> T2'Class. (Neither it were possible with implicit dereferencing)
>
> With the above, one would create a subtype of H1 constrained to T2'Class
> and then derive from it (better in one step, of course).

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.)

                                     Randy.




  reply	other threads:[~2013-10-22  4:35 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 [this message]
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
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