comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <Stephe.Leake@nasa.gov>
Subject: Re: Question about generics.
Date: Tue, 04 Jul 2006 09:29:40 -0400
Date: 2006-07-04T09:29:40-04:00	[thread overview]
Message-ID: <uirmdsdkr.fsf@nasa.gov> (raw)
In-Reply-To: Xns97F47B960CF95pchapinsovernet@198.186.192.137

"Peter C. Chapin" <pchapin@sover.net> writes:

> Here is what I'm trying to do
>
> generic
>   Size : in Integer;
> package Xyzzy is
>   type Index is mod Size;
>   -- etc.
> end Xyzzy;
>
> The compiler (gnat) complains about the modular type definition, saying 
> that Size is a non-static expression and that's no good. I understand 
> what this error means and I understand the rationale behind it (thanks 
> to looking in Cohen's book "Ada As a Second Language"). 

For others, I'll summarize that rationale here. The generic above
might be instantiated in a procedure:

procedure Foo (User_Size : in Integer)
is
    package Bar is new Xyzzy (Size => User_Size);
begin
    ...
end Foo;

In this case, Size is _not_ static, not even in an informal sense. So
the compiler doesn't know how many bits to use for Index.

> My question is: how can I get the effect I'm looking for? My plan is
> to only instantiate the package with constants so all the necessary
> information should be available at compile time. For example
>
>     	package Fizzle is new Xyzzy(Size => 10);
>
> I realize that I could make the Index type a generic parameter but that 
> would require me to define the type at the point of instantiation and 
> that seems unnatural. Conceptually I'm trying to parameterize the 
> package on a (static) size. It doesn't seem like I should have to define 
> a type to express that concept.

That does seem like a reasonable goal. But I think you need to modify
the language to get there. Perhaps a new class of generic parameters:

generic 
    Size : static Integer;
package Xyzzy_Static is
  type Index is mod Size;
  -- etc.
end Xyzzy_Static;

Then Xyzzy_Static could only be instantiated with truly static Size
(in the Ada meaning of 'static').

Short of that, I think you have to declare the type outside the
generic package, as you say.

I often find it better to declare the type outside the package,
because I want it for things the package doesn't declare. But if you
intend to put everything into the generic, it would be nice to do it
your way.

It would be interesting to raise the 'static' proposal on the Ada
comment mailing list (where they discuss future changes to the Ada
language). But to do that right, I'd need more information about why
you want to do this. Their mostly likely response will be "it's not
hard to declare the type outside the package". So we need some more
ammunition about why that's not a good answer.

-- 
-- Stephe



  parent reply	other threads:[~2006-07-04 13:29 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-02 16:08 Question about generics Peter C. Chapin
2006-07-02 18:49 ` Martin Krischik
2006-07-03  6:30 ` Jeffrey R. Carter
2006-07-03 10:33   ` Peter C. Chapin
2006-07-03 11:42     ` Jean-Pierre Rosen
2006-07-03 16:44     ` Pascal Obry
2006-07-04  1:09       ` Peter C. Chapin
2006-07-04  6:17         ` M E Leypold
2006-07-04 10:48           ` Peter C. Chapin
2006-07-03 20:03     ` Jeffrey R. Carter
2006-07-03 20:18       ` Dmitry A. Kazakov
2006-07-04  0:08         ` Randy Brukardt
2006-07-04  7:48           ` Dmitry A. Kazakov
2006-07-04  0:43         ` Jeffrey R. Carter
2006-07-03  9:46 ` Martin Krischik
2006-07-04 13:29 ` Stephen Leake [this message]
2006-07-05 12:08   ` Dmitry A. Kazakov
  -- strict thread matches above, loose matches on Subject: below --
1993-09-02 17:45 question " Stef  Van Vlierberghe
1993-08-12 15:18 Robert I. Eachus
1993-08-11 18:48 cis.ohio-state.edu!magnus.acs.ohio-state.edu!math.ohio-state.edu!howland.
1993-08-11  0:25 agate!howland.reston.ans.net!europa.eng.gtefsd.com!darwin.sura.net!seas.g
1993-08-10 15:53 Robert I. Eachus
1993-08-09 21:29 Kenneth Anderson
1989-05-29 20:54 Question " "14827_DAVID PAPAY"
1989-05-29  7:02 "Jonathan B. Owen"
replies disabled

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