From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,1cb75f0476fe2d1a X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news3.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newscon06.news.prodigy.com!prodigy.net!newsfeed-00.mathworks.com!nntp.TheWorld.com!not-for-mail From: Robert A Duff Newsgroups: comp.lang.ada Subject: Re: Half Constrained Array Types and Slices Date: 03 Mar 2006 18:41:10 -0500 Organization: The World Public Access UNIX, Brookline, MA Message-ID: References: NNTP-Posting-Host: shell01.theworld.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: pcls4.std.com 1141429270 9420 192.74.137.71 (3 Mar 2006 23:41:10 GMT) X-Complaints-To: abuse@TheWorld.com NNTP-Posting-Date: Fri, 3 Mar 2006 23:41:10 +0000 (UTC) User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 Xref: g2news1.google.com comp.lang.ada:3260 Date: 2006-03-03T18:41:10-05:00 List-Id: "Jeffrey R. Carter" writes: > Robert A Duff wrote: > > I'm not so sure about that. I'm inclined to say slices always slide to > > the lower bound. The idea that X(3..5) should have lower bound 3 seems > > to make sense at first, until you think about passing that slice as a > > parameter. The called procedure should not care that it's a slice at > > all -- much less the particular bounds used to create it. The Ada rule > > violates abstraction. Same issue for function returns. > > OK. So you're saying a slice (Lo .. Hi) of an unconstrained array type > would slide to Index'First .. Index'First + Hi - Lo? Yes. > > Yes, I agree that's a problem. Various possible solutions come to > > mind. Probably the simplest is to outlaw slices of constrained arrays. > > After all, what is the sense in saying "all arrays of type T go from > > 1 to 5", and then turn around and create values of type T with bounds > > 3..4? Even in Ada as is, there is very little use for this feature. > > You can do: > > type Bits is array(Int range 0..31) of Boolean; > > function Rotate(X: Bits) return Boolean Bits is > > begin > > return X(31) & X(0..30); > > end Rotate; > > But that's not worth much language complexity. If you want that, > > declare an unconstrained (doubly unconstrained?) array, along with > > constrained subtype(s). > > That was the rule in Ada 83, IIRC. It apparently bit enough people that > it was changed in Ada 95. I don't know of any change between 83 and 95, here. But I could be forgetting something; please remind me. Anyway, my suggestion was to forbid (at compile time) any slices that might cause confusion in the mind of the programmer, or run-time errors. I think I'd be happy with a language that allows slices only when the lower-bound is fixed. I'd also be happy to eliminate slices as l-values. They cause a lot of implementation difficulty for not much benefit. Or else go the whole hog, and allow X(5..10) := "xx", which does not work in Ada, because that would require changing the length of the whole thing. > > I can talk about more and more exotic ideas, depending on how far away > > from Ada you're willing to contemplate. ;-) For example, I'd like to > > be able to do: > > type T(D1: ...; D2: ...) is ... > > subtype S is T(D1 => 17); -- Illegal in Ada to partially constrain! > > Or maybe the syntax should be "T(D1 => 17, D2 => <>)". > > In that case, this would be how you'd deal with slices of > half-constrained arrays if you wanted to keep the bounds; the base type > would be unconstrained and the first-named subtype would be partially > constrained. Yes, but this is all very not-Ada in several ways. There are probably some semantic anomalies I have not considered. - Bob