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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,effb80d4bb7716dd X-Google-Attributes: gid103376,public From: Stephen Leake Subject: Re: Wanted: Ada STL. Reward: Ada's Future Date: 1999/02/05 Message-ID: #1/1 X-Deja-AN: 441019205 References: <790f4q$3l@bgtnsc01.worldnet.att.net> <36B856E4.D921C1D@bton.ac.uk> Organization: NASA Goddard Space Flight Center -- Greenbelt, Maryland USA Newsgroups: comp.lang.ada Date: 1999-02-05T00:00:00+00:00 List-Id: Brian Rogoff writes: > On 4 Feb 1999, Stephen Leake wrote: > > Brian Rogoff writes: > > > On Wed, 3 Feb 1999, Matthew Heaney wrote: > > > > ... snip ... > > > > > > > > for Index in Map'Range loop > > > > > > > > > > > > > > > > end loop; > > > > > > > > If this looks simpler than my earlier formulation, that's because it's > > > > simpler. Loop iteration in Ada is less error prone than in C. > > > > > > > > This is yet another reason why I think that looking at the STL as a > > > > model for a standard Ada library is dangerous and misleading. > > > > > > Indeed. Just look at how incomprehensible AGL looping looks > > > > > > Os := Copy(Start(Deque'Access), Finish(Deque'Access), Os); > > > > > > or > > > > > > Pos := Find(Start(IVec'Access), Finish(IVec'Access), 42); > > > > > > The horror, the horror ... > > > > > > > The idioms in both languages are completely different. So forget about > > > > the STL as a model for an Ada library. > ... snip ... > > > > > > So far, you've said nothing that indicates that you've looked seriously at > > > the STL. Why don't you just get very specific and say exactly why you > > > think it is a bad model for an Ada library, using examples? I think the > > > idea of writing algorithms over collections in terms of their iterators is > > > a good one. > > > > I thought Matthew just did that, but you haven't answered the question > > "why does the STL allow iteration past the end of the array". This > > bugs me too. Is there a real reason here, or is it an accident of the > > implementation? > > How do you even know that it points past the end of the array, in an Ada > implementation? We have a constructor for an iterator called "Last" or > "Finish" or whatever. Should it matter how Finish is implemented? Ok, I agree, you've come up with a good abstraction, where you can't tell / don't care what the implementation is. That's what I was looking for. Still, there is a distinction between "Last" and "Finish". In Ada, indexing an array with Last gives a valid data element. In C++ STL, dereferencing a "Finish" iterator does _not_ give a vaid data pointer. That is the essential difference in style. Let me ask my question this way. Define an iterator value "Last" that represents the last valid data element in a container. Define an iterator value "Finish" that represents no valid data element in a container. Also define Prev (Finish) == Last. 1) Are there algorithms that can be expressed in terms of Finish that cannot be expressed in terms of Last? 2) Do we also need Begin and First? or just First? Hmm, I think I'm implying an ordered container here. Do the answers change for unordered containers? -- Stephe