comp.lang.ada
 help / color / mirror / Atom feed
* Ada 0y wish list: parameters of package parameters
@ 2001-02-15 13:07 Michel Gauthier
  2001-02-17  8:24 ` Dr Adrian Wrigley
  2001-02-20 18:37 ` Ehud Lamm
  0 siblings, 2 replies; 4+ messages in thread
From: Michel Gauthier @ 2001-02-15 13:07 UTC (permalink / raw)



My main wish about Ada-0Y is about the following.

I am used to defining what I call 'signature packages', generic 
packages with in principle nothing inside, but suitable to 
define future parameters.

    generic
        type Item_Type is private ;
        -- operations defining something like an algebraic structure
    package Some_Algebra is end ;

Example of use :

    generic
        with package Numbers is new Ring_Structure ( <> ) ;
    package Polynomials is
        ...
    end Polynomials ;

No problem at this point.

The problem appears when I add signatures for order structures, 
and try to specify. The intent is :

    generic
        with package Structure_1 is new Algrbraic_Structure ( any parameters ) ;
        with package Structure_2 is new Order_Structure ( same type ,
anything else ) ;
    package Something is
        ...
    end Something ;

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 ?

----------          ----------          ----------          ---------- 
Michel Gauthier / Laboratoire d'informatique
83, rue d'Isle / F-87000 Limoges
telephone +33 555 43 69 73
fax +33 555 43 69 77
----------          ----------          ----------          ----------
Nous n'etions pas dans la langueur,
nous ne sombrons pas dans l'allegresse.
----------          ----------          ----------          ----------



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Ada 0y wish list: parameters of package parameters
  2001-02-15 13:07 Ada 0y wish list: parameters of package parameters Michel Gauthier
@ 2001-02-17  8:24 ` Dr Adrian Wrigley
  2001-02-20 18:28   ` Stephen Leake
  2001-02-20 18:37 ` Ehud Lamm
  1 sibling, 1 reply; 4+ messages in thread
From: Dr Adrian Wrigley @ 2001-02-17  8:24 UTC (permalink / raw)


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



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Ada 0y wish list: parameters of package parameters
  2001-02-17  8:24 ` Dr Adrian Wrigley
@ 2001-02-20 18:28   ` Stephen Leake
  0 siblings, 0 replies; 4+ messages in thread
From: Stephen Leake @ 2001-02-20 18:28 UTC (permalink / raw)


Dr Adrian Wrigley <amtw@linuxchip.demon.co.uk> writes:

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

Better to use an inlined Copy function; the compiler will warn you if
something changes during maintenance.

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

Perhaps Item_Type should be a generic parameter of both Structure_1
and Structure_2?

-- 
-- Stephe



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Ada 0y wish list: parameters of package parameters
  2001-02-15 13:07 Ada 0y wish list: parameters of package parameters Michel Gauthier
  2001-02-17  8:24 ` Dr Adrian Wrigley
@ 2001-02-20 18:37 ` Ehud Lamm
  1 sibling, 0 replies; 4+ messages in thread
From: Ehud Lamm @ 2001-02-20 18:37 UTC (permalink / raw)


Just to say I had this problem too, I think it would be nice if something
along the lines of the solution you propsoed was added.

Ehud Lamm





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2001-02-20 18:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-02-15 13:07 Ada 0y wish list: parameters of package parameters Michel Gauthier
2001-02-17  8:24 ` Dr Adrian Wrigley
2001-02-20 18:28   ` Stephen Leake
2001-02-20 18:37 ` Ehud Lamm

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