From: Jere <jhb.chat@gmail.com>
Subject: Re: Full view of a private partial view cannot be a subtype
Date: Mon, 18 Dec 2017 17:01:46 -0800 (PST)
Date: 2017-12-18T17:01:46-08:00 [thread overview]
Message-ID: <f1eabf54-9a2d-40f8-b01b-cac0a37cbe32@googlegroups.com> (raw)
In-Reply-To: <p16332$1rfb$1@gioia.aioe.org>
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;
Since all I am doing is automating the access type and
the deallocation operation, I don't think a new type
is really the right design. Additionally, I don't want
to expose the deallocation operation as it should never
be called directly.
Based on earlier conversion from Jeff, it looks like
composition is my best bet since I cannot do it via
subtyping and renames. I was just hoping there was a
way I could do it without adding so much extra stuff
to read and maintain. I don't like decreasing
readability like that. If I am willing to expose the
deallocation operation, then I can just use subtype
and renames (which make more sense to me in this
case) but that's the tradeoff.
next prev parent reply other threads:[~2017-12-19 1:01 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 [this message]
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
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