comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen_leake@stephe-leake.org>
Subject: Re: Full view of a private partial view cannot be a subtype
Date: Tue, 19 Dec 2017 11:10:14 -0800 (PST)
Date: 2017-12-19T11:10:14-08:00	[thread overview]
Message-ID: <1c68c38a-a1d3-461e-bce0-8a797d87c490@googlegroups.com> (raw)
In-Reply-To: <f1eabf54-9a2d-40f8-b01b-cac0a37cbe32@googlegroups.com>

On Monday, December 18, 2017 at 7:01:49 PM UTC-6, Jere wrote:
> On Sunday, December 17, 2017 at 10:39:17 AM UTC-5, Dmitry A. Kazakov wrote:
> > On 2017-12-17 16:26, Jere wrote:
> > 
> > > my assertion is that:
> > > 
> > >     subtype Thing is Core_Pkg.Thing;
> > > 
> > >     procedure Do_Something(The_Thing : in out Thing)
> > >        renames Core_Pkg.Do_Something;
> > >         
> > > 
> > > is easier to both maintain and read than:
> > > 
> > >     type Thing is new Core_Pkg.Thing with null record;
> > >     
> > >     procedure Do_Something(The_Thing : in out Thing);
> > 
> > But these are two semantically different concepts. Ada's subtype 
> > declares an equivalent type [it inherits everything from and exports 
> > everything to the base]. Ada's new tagged type declares a new instance 
> > of a class. It only inherits.
> > 
> > I don't understand how can you exchange one for another.
> > 
> > -- 
> > Regards,
> > Dmitry A. Kazakov
> > http://www.dmitry-kazakov.de
> 
> I don't want to exchange one for the other.  I have a package that I want
> to provide default arguments to privately but maintain the same exact 
> type/operation specification.  Subtyping seems more correct than
> inheritance in this case.  I'm not trying to define a new type or an
> extension of a type.  I just want provide a simpler interface to a
> much more complex generic while hiding part of that so the user doesn't
> accidentally do something they shouldn't. 
> 
> Something like:
> 
> generic
>    type Item_Type(<>);
>    type Item_Access is access Item_type;
>    with procedure Deallocation(Ref : in out Item_Access);
> package Sledgehammer is
>    <types>
>    <operations>
> private
>    <implementation>
> end Sledgehammer;
> 
> This would be used in maybe 5% or less of the code base and only
> when absolutely necessary.  I want to convert it to:
> 
> generic
>    type Item_Type(<>) is limited private;
> package Nicer_Package is
>    type Item_Access is access Item_Type;
>    <same types>
>    <same operations>
> private
>    procedure Deallocate is new Ada.Unchecked_Deallocation
>       (Item_Type,Item_Access);
> 
>    package Implementation is new Sledgehammer
>       (Item_Type => Item_Type,
>        Item_Access => Item_Access,
>        Deallocation => Deallocate);
> 
>    <implementation>
> end Nicer_Package;

I had a pattern like that in my original SAL library. I provided "Aux" generics to do the helper instantiations in the simple cases, so the typical use case was:

package My_List_Aux is new Sledgehammer_Aux (Item_Type);
package My_Lists is new Sledgehammer (Item_Type, My_List_Aux.Item_Access, My_List_Aux.Deallocate);

I found that to be a good compromise.

  parent reply	other threads:[~2017-12-19 19:10 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-03  2:14 Full view of a private partial view cannot be a subtype Jere
2017-12-03 12:01 ` Jeffrey R. Carter
2017-12-03 13:33   ` Jere
2017-12-03 14:34     ` Jeffrey R. Carter
2017-12-03 17:44       ` Robert Eachus
2017-12-03 18:50         ` Simon Wright
2017-12-03 22:10           ` Robert Eachus
2017-12-03 19:03         ` Jeffrey R. Carter
2017-12-03 22:23       ` Jere
2017-12-04  8:25         ` Dmitry A. Kazakov
2017-12-04 18:04         ` Jeffrey R. Carter
2017-12-04 20:41           ` Jere
2017-12-04 21:48             ` Jeffrey R. Carter
2017-12-05  8:20               ` Dmitry A. Kazakov
2017-12-05 18:16                 ` Jeffrey R. Carter
2017-12-05 20:39                   ` Dmitry A. Kazakov
2017-12-05 21:38                     ` Jeffrey R. Carter
2017-12-05 12:35               ` Jere
2017-12-05 18:40                 ` Jeffrey R. Carter
2017-12-06 12:54                   ` Jere
2017-12-06 18:03                     ` Jeffrey R. Carter
2017-12-05 20:22                 ` Randy Brukardt
2017-12-05 15:27               ` Shark8
2017-12-05 18:50                 ` Jeffrey R. Carter
2017-12-05 20:59                 ` Randy Brukardt
2017-12-05 22:43                   ` Shark8
2017-12-07  0:52                     ` Randy Brukardt
2017-12-05 20:16               ` Randy Brukardt
2017-12-05 21:29                 ` Jeffrey R. Carter
2017-12-07  0:04                   ` Randy Brukardt
2017-12-04 20:49 ` Randy Brukardt
2017-12-05 12:56   ` Jere
2017-12-05 20:12     ` Randy Brukardt
2017-12-17 15:26       ` Jere
2017-12-17 15:39         ` Dmitry A. Kazakov
2017-12-18 22:47           ` Randy Brukardt
2017-12-19  1:22             ` Jere
2017-12-19 23:16               ` Randy Brukardt
2017-12-19  1:01           ` Jere
2017-12-19  9:08             ` Dmitry A. Kazakov
2017-12-19 13:08               ` Jere
2017-12-19 13:27                 ` Dmitry A. Kazakov
2017-12-19 19:10             ` Stephen Leake [this message]
2017-12-18 20:45 ` Stephen Leake
2017-12-18 22:54   ` Randy Brukardt
2017-12-19  1:08   ` Jere
replies disabled

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