comp.lang.ada
 help / color / mirror / Atom feed
From: stefan-lucks@see-the.signature
Subject: Re: Array Help?
Date: Fri, 9 Mar 2012 09:48:37 +0100
Date: 2012-03-09T09:48:37+01:00	[thread overview]
Message-ID: <Pine.LNX.4.64.1203090923440.19986@medsec1.medien.uni-weimar.de> (raw)
In-Reply-To: <jjbobn$frv$1@munin.nbi.dk>

On Thu, 8 Mar 2012, Randy Brukardt wrote:
[...]
> <stefan-lucks@see-the.signature> wrote: 

> > 1. Testing
> >
> > When you declare
> >
> >  procedure Sort(Items: in out array(Positive range <>) of T)
> 
> Let's hope you never do that, because anonymous types are the bane of Ada. 
> And you surely can't do it today!

OK, the real thing would look about like that: 

  generic
     type Element_Type is (<>);
     type Index_Type is (Positive range <>);
     type Collection_Type is array(Index_Type range <>) of Element_Type;
     with function "<"(Left, Right : Element_Type) return Boolean is <>;

  function Sort(Items : Collection_Type) return Collection_Type;

> > in a package specification, and you try to write a proper black-box test,
> > you need *more* test cases then when you do the same with another popular
> > language.
> 
> Right. Bob's suggestion for some semi-constrained array subtype would fix 
> that. But note that it was killed in Ada 95 in part because the 
> implementation needed was essentially a record type with some sort of magic 
> indexing. Which was a mess.

Would it ease the implementation if you constrain the start index to some 
fixed value, such as Index_Type'First?

[...]

> >  procedure Sort(Items: in out array(generic Positive range <>) of T);

> Again, anonymous types are a disaster in Ada, and there is no way that we 
> should have more of them. I would strongly hope that this never appears even 
> in Ada 2525. ;-)

Sorry for using anonymous arrays. I hardly ever do this in real 
code. Please change the above code to 

  generic
     type Element_Type is (<>);
     type Collection_Type is array(generic Positive range <>) of Element_Type;
     with function "<"(Left, Right : Element_Type) return Boolean is <>;
  function Sort(Items : Collection_Type) return Collection_Type;

The issue is the same:

> > Sort(X) should be callable if the index type of X is any discrete type,
> > except when the index type is too large (i.e., X has more than
> > Positive'Last elements).
> 
> If you want that, you need to declare that. Positive is a numeric type, and 
> thus has "+" and "-" available; it is never going to be allowed to match 
> "any discrete type" which includes enumeration types.
> 
> It's plenty easy to write a generic like this (see the predefined ones for 
> examples), so I fail to see what possible need you are addressing here.

It is a readability issue. I frequently use arrays with different index 
types, that I need to sort, or to search for the same item being stored 
more than once ... Having to instantiate, say, the same Sort procedure 
several times makes the program less readable. 

But I agree with you that that is a minor issue, and that Bob's suggestion 
seems to solve the testing thing quite well.



-- 
---- Stefan.Lucks (at) uni-weimar.de, University of Weimar, Germany  ----
    <http://www.uni-weimar.de/cms/medien/mediensicherheit/home.html>
------  I  love  the  taste  of  Cryptanalysis  in  the  morning!  ------




  reply	other threads:[~2012-03-09  8:41 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-28 20:15 Array Help? Will
2012-02-28 20:47 ` Ludovic Brenta
2012-02-28 22:11   ` Simon Wright
2012-02-28 23:09     ` Will
2012-02-29  0:24   ` Adam Beneschan
2012-02-28 20:50 ` Gautier write-only
2012-02-28 21:33 ` Simon Wright
2012-02-29  0:27   ` Adam Beneschan
2012-02-29  8:00     ` Simon Wright
2012-02-29  8:48       ` Simon Wright
2012-02-29  0:22 ` Adam Beneschan
2012-02-29 16:09   ` Robert A Duff
2012-02-29 16:50     ` Ludovic Brenta
2012-02-29 18:24       ` Robert A Duff
2012-02-29 19:45         ` stefan-lucks
2012-02-29 20:45           ` Jeffrey Carter
2012-02-29 21:27             ` stefan-lucks
2012-02-29 23:06           ` Robert A Duff
2012-03-02 13:45             ` stefan-lucks
2012-03-07 23:58             ` Randy Brukardt
2012-03-08 11:20               ` stefan-lucks
2012-03-09  2:02                 ` Randy Brukardt
2012-03-09  8:48                   ` stefan-lucks [this message]
2012-03-09 21:10                     ` Randy Brukardt
2012-03-15  2:55                     ` BrianG
2012-03-15  7:46                       ` stefan-lucks
2012-02-29 20:07         ` Dmitry A. Kazakov
2012-02-29 23:15           ` Robert A Duff
2012-03-01  8:54             ` Dmitry A. Kazakov
2012-03-01 14:06               ` Robert A Duff
2012-02-29 20:47         ` Simon Wright
2012-02-29 22:23           ` Robert A Duff
2012-02-29 23:27             ` Robert A Duff
2012-03-01  0:53               ` Adam Beneschan
2012-03-01  7:16               ` Ludovic Brenta
2012-03-01 14:03                 ` Robert A Duff
2012-03-08  0:11                   ` Randy Brukardt
2012-03-08  0:08               ` Randy Brukardt
2012-02-29 23:30             ` Simon Wright
2012-02-29 18:35     ` Jeffrey Carter
2012-02-29 22:59       ` Robert A Duff
2012-02-29 23:51         ` Jeffrey Carter
2012-03-01  3:03           ` Robert A Duff
2012-02-29 20:40     ` Adam Beneschan
replies disabled

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