comp.lang.ada
 help / color / mirror / Atom feed
From: Dr Adrian Wrigley <amtw@linuxchip.demon.co.uk>
Subject: Re: Ada 0y wish list: parameters of package parameters
Date: Sat, 17 Feb 2001 00:24:19 -0800
Date: 2001-02-17T00:24:19-08:00	[thread overview]
Message-ID: <3A8E3533.948C6618@linuxchip.demon.co.uk> (raw)
In-Reply-To: gauthier-1502011408080001@193.50.185.13

Michel Gauthier wrote:
stuff deleted...
> Ada-95 solutions are complex and not fully general.
> A possible syntax could be :
> 
>         with package Structure_1 is new Algrbraic_Structure ( <> ) ;
>         with package Structure_2 is new Order_Structure
>                     ( Structure_1 . Item_Type , others => <> ) ;
> 
> Any suggestion or opinion ?

Yes! I had a simlar problem a while back.

I was working on numerical integration code, and wanted to bring
together three such signature packages.  One defined the domain of
integration, one defined the type of the result, one defined
the integrand function.  Of course, the generic should
specify that the integrand must return the same type

At the time I was new to Ada, and expected to be able to use your
syntax above - it seemed the "Ada way".  I contacted a (well known)
Ada expert, and was advised it couldn't be done how I wanted.

My solution was to add generic functions, which converted
between the types:

         with package Structure_1 is new Algrbraic_Structure ( <> ) ;
         with package Structure_2 is new Order_Structure     ( <> ) ;
         with function Convert (X : Structure_1 . Item_Type)
              return Structure_2.Item_Type;
         with function Convert (X : Structure_2 . Item_Type)
              return Structure_1.Item_Type;

This allows the package to use the two types interchangably,
provided that the Convert functions are called, if necessary.
You could use Unchecked_Conversion between the types, if you
believe them to be the same.

The alternative I could see in my case was to replace the package
generic parameters with all the contents of the specification that
were needed.  Every time a type occurs which need to be the same
in Structure_1 and Structure_2, you only have it once.
This is general (I think), but can be very verbose, and obscures
the abstraction.

I can't at this moment see any major implementation problem with Michel's
suggestion, but I'm not qualified to comment.

Maybe someone here should sumbit a proposal to address the problem.
--
Dr Adrian Wrigley



  reply	other threads:[~2001-02-17  8:24 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-02-15 13:07 Ada 0y wish list: parameters of package parameters Michel Gauthier
2001-02-17  8:24 ` Dr Adrian Wrigley [this message]
2001-02-20 18:28   ` Stephen Leake
2001-02-20 18:37 ` Ehud Lamm
replies disabled

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