comp.lang.ada
 help / color / mirror / Atom feed
From: Brian Rogoff <bpr@shellx.best.com>
Subject: Re: STL in Ada95 [was: Any research putting c above ada?]
Date: 1997/05/22
Date: 1997-05-22T00:00:00+00:00	[thread overview]
Message-ID: <Pine.SGI.3.95.970522205010.18197A-100000@shellx.best.com> (raw)
In-Reply-To: 33838C37.29C0@sprintmail.com


John Volan wrote: 
> The C++ STL was forced into some particularly goofy complexities because
> of C++'s lack of anything comparable to Ada95's generic contract model.
> For instance, every container class that allows bidirectional traversal
> has to be accompanied by both a forward iterator class _and_ a reverse
> iterator class.  Why? Because all those reusable algorithm templates are
> written in terms of an iterator having a "++" increment operator.  If
> you have a bidirectional iterator that has both "++" and "--", you can't
> instantiate an algorithm twice using "++" in one case and "--" in the
> other.  Instead, you have to have a reverse iterator class wrapped
> around your forward iterator class, with the "++" for the reverse
> iterator being implemented using the "--" of the forward iterator.
> 
> In Ada95, this is totally unnecessary.  Suppose you have
> Some_Iterator_Type that has both an Advance procedure (++ analog) and a
> Backup procedure (-- analog).  A reusable algorithm template might look
> something like this:
> 
>   generic
>     type Iterator_Type is private;
>     type Item_Type is private;
>     with procedure Advance (Iterator : in out Iterator_Type);                  
>     with function Get_Item (Iterator : in Iterator_Type) return
> Item_Type;
>     ... -- whatever other formals
>   procedure Do_Whatever                     -- whatever the algorithm is
>     (Start, Stop : in Iterator_Type; ... ); -- whatever parameters
> 
> ... followed by instantiation of Do_Whatever with Advance => Retreat 
>     to get Reverse_Iterators
> No need for all those reverse iterator types!

Yes, the RPI version omitted reverse iterators, and the authors wrote that
they planned to use Adaptors to do this. 

> > One thing I wish I could do better is have the structure of Iterator
> > categories reflected in the Ada code.
> >
> > In the STL, Forward_Iterators
> > have properties of both Input_Iterators and Output_Iterators, i.e.
> ...
> > Now, I could just define Forward_Iterators by having two generic
package
> > parameters, but then I'd have to instantiate an Input/Output Iterator
pair
> > every time I wanted a Forward_Iterators package.

> Nah, I wouldn't bother.  Again, that's the contortions C++ forces you
> into because you can't really specify generic contracts.  If an                
> algorithm needs something that supports the interface for an "input
> iterator", the generic clause on that algorithm should just look
> something like what you wrote:

I disagree. I think that if we see the same contract over and over again,
we should be able to capture that contract and replace it with an
abstraction, so I'd write 

> generic
>   type Value_Type is private;
>   type Iterator_Type is private;
>   with procedure Next ( i: in out Iterator_Type ) is <>;
>   with function  Get_Value ( i: in Iterator_Type ) return Value_Type is
<>;
>  procedure ... -- whatever algorithm
>  -- (but don't bother with an Input_Iterator package)

as

generic
    type Value_Type is private;
    type Iterator_Type is private;
    with procedure Next ( i: in out Iterator_Type ) is <>;
    with function  Get_Value ( i: in Iterator_Type ) return Value_Type is
<>;
package AGL.Input_Iterators is
end AGL.Input_Iterators;

generic 
	with package Iterators is new AGL.Input_Iterators(<>);
procedure ... -- whatever algorithm

and so I capture the contract as a "signature". Why do you feel that it is 
better to explicitly write out the parameters during instantiation rather 
than capturing the commonality in a signature package?

In my current implementation, every generic container representation has a
child package Iterators which instantiates nested packages corresponding to
each of the iterator categories (Input, Output, Forward, etc.) that it
supports, so you get packages which can be used as generic parameters to
these algorithms easily. It's pretty much the same as it is in the RPI
implementation, except that they nested the Iterator package, and
instantiated the different categories, inside the top package, i.e., they
had 


Lists.Iterators,             -- Iterators textually nested inside Lists
Lists.Forward_Iterators,     -- Forward_Iterators textually nested inside
Lists
etc., 

and I have 

Lists
Lists.Iterators                     -- Child package
Lists.Iterators.Forward_Iterators   -- Forward_Iterators textually nested 
                                    -- inside Lists.Iterators
etc.

I like this, because it separates the iterators from their containers, so
you can use the containers without dragging the iterators along. 

Where I wish I could do better is in  the factoring of the iterator
categories. The categories form an inheritance hierarchy of sorts. If we
were to write these in pseudo-Java:  

interface InputEnumerator extends TrivialEnumerator {
	void next();
	Element getValue();
	void setValue(Element e);
}

interface OutputEnumerator extends TrivialEnumerator {
	void next();
	void setValue(Element e);
}

interface ForwardEnumerator extends OutputEnumerator, InputEnumerator {
}

interface BidirectionalIterator extends ForwardEnumerator {
	void prev();
	boolean equals( BidirectionalIterator bdi );
}

etc.

I can combine interfaces, and inherit from them. If I try to do something 
similar with the generic signatures, I would then have to instantiate 
every "super-signature" that the signature "inherits" from, where by 
inheritance I mean something like 

generic 
	-- And Forward_Iterators is built from Input and Output
Iterators...
	with package Supersig is new Forward_Iterators(<>);
	with procedure Prev ( Iterator : in out Supersig.Iterator_Type );
	with function "=" ( Left, Right : Supersig.Iterator_Type ) 
               return Boolean;
package Bidirectional_Iterators is
end Bidirectional_Iterators;

So this Ada idiom of using generic signatures doesn't seem to be
"composable", in that if I want to have signatures composed of signatures 
composed..., I'll have to instantiate each one to just get the one I want.
Rather than not use these signature packages at all though, I just have one
for each category, and leave them independent. That's OK for this library,
because it is small, but for a library with many more categories and
relationships, I think there might be a problem. 

-- Brian


                                                                             









  parent reply	other threads:[~1997-05-22  0:00 UTC|newest]

Thread overview: 267+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-04-09  0:00 Any research putting c above ada? Konstantin B. Goldin
1997-04-10  0:00 ` Daniel P Hudson
1997-04-10  0:00 ` Richard Krehbiel
1997-04-10  0:00   ` Andrew Dunstan
1997-04-10  0:00   ` Tom Wheeley
1997-04-11  0:00     ` Richard Kenner
1997-04-16  0:00     ` Daniel P Hudson
1997-04-17  0:00     ` Stephen Leake
1997-04-10  0:00   ` Philip Brashear
1997-04-10  0:00     ` CubanPete
1997-04-11  0:00       ` John Thomas Apa
1997-04-11  0:00   ` Steve Jones - JON
     [not found]     ` <3359e813.340466234@news.pacificnet.net>
1997-04-11  0:00       ` James S. Rogers
1997-04-12  0:00         ` Steve Summit
1997-04-12  0:00         ` Danette & Murray Root
1997-04-12  0:00       ` Dave Wood
     [not found]         ` <3373409f.494266577@news.pacificnet.net>
1997-04-13  0:00           ` Dave Wood
     [not found]             ` <E8pxJ0.I3s@thomsoft.com>
     [not found]               ` <3355E0F2.56E5@aonix.com>
1997-04-18  0:00                 ` David Hanley
1997-04-20  0:00                   ` Nick Roberts
1997-04-14  0:00           ` Robert S. White
1997-04-14  0:00             ` Kaz Kylheku
1997-04-15  0:00               ` Robert S. White
     [not found]                 ` <5ivtcu$puv@huron.eel.ufl.edu>
1997-04-16  0:00                   ` Kaz Kylheku
1997-04-16  0:00                     ` Byron
1997-04-16  0:00                       ` John Winters
     [not found]                     ` <5j31dt$o3j@huron.eel.ufl.edu>
1997-04-17  0:00                       ` Kaz Kylheku
1997-04-18  0:00                       ` David Thornley
     [not found]                         ` <338a1835.439086993@news.pacificnet.net>
1997-04-25  0:00                           ` Alan Bowler
     [not found]                     ` <01bc4da9$75237100$f4f582c1@xhv46.dial.pipex.com>
1997-04-21  0:00                       ` Daniel P Hudson
1997-04-21  0:00                         ` Robert I. Eachus
1997-04-14  0:00           ` Kaz Kylheku
1997-04-14  0:00           ` Stephen Leake
1997-04-13  0:00         ` Larry Kilgallen
1997-04-12  0:00       ` David Weller
1997-04-13  0:00       ` Kaz Kylheku
1997-04-27  0:00         ` Richard Riehle
1997-04-29  0:00           ` Kaz Kylheku
1997-04-30  0:00             ` Jon S Anthony
1997-05-01  0:00               ` Kaz Kylheku
1997-05-02  0:00                 ` Jon S Anthony
1997-05-03  0:00                   ` Craig Franck
1997-05-03  0:00                 ` Matthew Givens
1997-05-03  0:00                   ` Robert S. White
1997-04-30  0:00             ` Robert I. Eachus
1997-04-30  0:00               ` Kaz Kylheku
1997-05-01  0:00                 ` Robert I. Eachus
1997-05-03  0:00                   ` Student responsability (Was: Any research putting c above ada?) Laurent Gasser
1997-05-03  0:00                     ` John Bode
1997-05-05  0:00                     ` Steven Huang
1997-05-05  0:00                   ` Any research putting c above ada? John Apa
1997-05-06  0:00                     ` Kevin Cline
1997-05-06  0:00                       ` Roy Grimm
1997-05-07  0:00                         ` Kevin Cline
1997-05-07  0:00                           ` Roy Grimm
1997-05-07  0:00                             ` Kaz Kylheku
1997-05-08  0:00                             ` Kevin Cline
1997-05-08  0:00                               ` Roy Grimm
1997-05-08  0:00                                 ` Kaz Kylheku
1997-05-09  0:00                                 ` Kevin Cline
1997-05-10  0:00                                   ` Dan Shea
1997-05-11  0:00                                     ` Kevin Cline
1997-05-07  0:00                         ` John Apa
1997-05-08  0:00                           ` Kevin Cline
1997-05-10  0:00                             ` John Apa
1997-05-11  0:00                               ` Kevin Cline
1997-05-14  0:00                                 ` Nick Roberts
1997-05-08  0:00                           ` Roy Grimm
1997-05-08  0:00                       ` Alan Brain
1997-05-07  0:00                     ` Adam Beneschan
1997-05-09  0:00                   ` Richard A. O'Keefe
1997-05-09  0:00                     ` Larry Weiss
1997-05-11  0:00                       ` Kevin Cline
1997-05-11  0:00                         ` Jay Martin
1997-05-12  0:00                           ` Kevin Cline
1997-05-12  0:00                         ` Craig Franck
1997-05-12  0:00                           ` Kevin Cline
1997-05-13  0:00                             ` Craig Franck
1997-05-13  0:00                               ` Jonathan Guthrie
1997-05-14  0:00                                 ` Mathew Hendry
     [not found]                           ` <F4243E31257E3230.1400B453F19F7D1B.A88AC4B6A31D <5l8gf8$2jp@mtinsc05.worldnet.att.net>
1997-05-13  0:00                             ` Kaz Kylheku
1997-05-13  0:00                               ` Lawrence Kirby
1997-05-14  0:00                               ` T Wheeley
1997-05-15  0:00                               ` Ray Blaak
1997-05-16  0:00                                 ` Alan Brain
1997-05-12  0:00                         ` Robert I. Eachus
1997-05-14  0:00                           ` Kevin Cline
     [not found]                         ` <5lb2mi$3i2@mtinsc03.worldnet.att.net>
1997-05-14  0:00                           ` Jonathan Guthrie
1997-05-14  0:00                             ` Szu-Wen Huang
1997-05-15  0:00                               ` Jonathan Guthrie
     [not found]                             ` <EA8sny.HKJ@thinkage.on.ca>
1997-05-16  0:00                               ` W. Wesley Groleau (Wes)
1997-05-14  0:00                     ` M. Prasad
     [not found]                     ` <rayEA5A7D.932@netcom.com>
1997-05-14  0:00                       ` W. Wesley Groleau (Wes)
1997-05-14  0:00                       ` Steve Jones - JON
1997-05-17  0:00                       ` Robert I. Eachus
1997-04-30  0:00               ` Jay Martin
1997-05-01  0:00                 ` Robert I. Eachus
1997-05-05  0:00                   ` Jay Martin
1997-05-06  0:00                     ` Kevin Cline
1997-05-07  0:00                       ` Robert I. Eachus
1997-05-01  0:00                 ` Kevin Cline
1997-04-30  0:00             ` Roy Grimm
1997-04-30  0:00               ` Kaz Kylheku
1997-04-30  0:00                 ` Jay Martin
1997-05-02  0:00                   ` Samuel A. Mize
1997-05-05  0:00                     ` Roy Grimm
1997-05-06  0:00                       ` Robert I. Eachus
1997-05-07  0:00                         ` Jay Martin
1997-05-07  0:00                           ` Kaz Kylheku
1997-05-08  0:00                             ` Jay Martin
1997-05-08  0:00                           ` Robert I. Eachus
1997-05-09  0:00                             ` Kevin Cline
1997-05-08  0:00                           ` Kevin Cline
1997-05-09  0:00                             ` Alan Brain
1997-05-11  0:00                       ` deafen
1997-05-12  0:00                         ` Roy Grimm
1997-05-12  0:00                         ` Kaz Kylheku
1997-05-01  0:00                 ` Roy Grimm
1997-05-01  0:00                   ` Jay Martin
1997-05-01  0:00                   ` Kaz Kylheku
1997-05-02  0:00                     ` Roy Grimm
1997-05-02  0:00                       ` Jon S Anthony
1997-05-05  0:00                         ` Steve Furlong
1997-05-06  0:00                           ` Kevin Cline
1997-05-06  0:00                             ` Jon S Anthony
1997-05-06  0:00                           ` Robert A Duff
1997-05-08  0:00                           ` Lawrence Kirby
1997-05-14  0:00                         ` T Wheeley
1997-05-14  0:00                           ` Kaz Kylheku
1997-05-10  0:00                   ` Fritz W Feuerbacher
1997-05-11  0:00                     ` Wilbur Streett
1997-05-12  0:00                       ` Kevin Cline
1997-05-20  0:00                       ` T Wheeley
     [not found]       ` <33508283.56dd@aonix.com>
     [not found]         ` <33526280.62b3@gsfc.nasa.gov>
     [not found]           ` <5ivths$pv2@huron.eel.ufl.edu>
1997-04-16  0:00             ` Matthew Givens
     [not found]               ` <m2ragbrmij.fsf@acm.org>
1997-04-20  0:00                 ` Nick Roberts
1997-04-11  0:00     ` Kaz Kylheku
1997-04-12  0:00       ` Tom Wheeley
     [not found]       ` <01bc46be$fb54cae0$3f6700cf@default>
1997-04-13  0:00         ` Kaz Kylheku
1997-04-14  0:00           ` Craig Franck
1997-04-14  0:00       ` Roy Grimm
     [not found]       ` <33526cbf.41c6@cca.rockwell.com>
     [not found]         ` <5iusvd$118e@newssvr01-int.news.prodigy.com>
1997-04-14  0:00           ` James S. Rogers
     [not found]           ` <33530e22.5940@worldnet.att.net>
1997-04-16  0:00             ` Matthew Givens
1997-04-18  0:00               ` Kenneth Almquist
1997-04-20  0:00                 ` Matthew Givens
1997-04-22  0:00                   ` Alan Brain
     [not found]                   ` <335d880c.324@dynamite.com.au>
1997-05-04  0:00                     ` Matthew Givens
1997-05-05  0:00                       ` Alan Brain
     [not found]                       ` <336ea9ca.3c92@dynamite.com.au>
1997-05-07  0:00                         ` Matthew Givens
1997-05-06  0:00                           ` Tom Moran
1997-05-07  0:00                             ` Jon S Anthony
1997-05-07  0:00                           ` Kevin Cline
1997-05-07  0:00                           ` Jon S Anthony
     [not found]                           ` <5aedd9b0882ea1bf.69856d7f77cd2ae3.229bf1374681c88b@library-proxy.airnews.net>
1997-05-10  0:00                             ` Matthew Givens
1997-05-10  0:00                               ` Robert S. White
1997-05-11  0:00                               ` Kevin Cline
1997-05-16  0:00                               ` brad.balfour
1997-05-14  0:00                           ` T Wheeley
1997-04-19  0:00               ` Tom Wheeley
     [not found]           ` <3353a187.1062@bix.com>
1997-04-16  0:00             ` Matthew Givens
1997-04-17  0:00               ` Tom Moran
     [not found]               ` <33545F8D.2AF4@worldnet.att.net>
     [not found]                 ` <335569F1.55A0@pratique.fr>
1997-04-20  0:00                   ` Nick Roberts
     [not found]           ` <33541be1.14961570@news.airmail.net>
1997-04-16  0:00             ` Matthew Givens
1997-04-16  0:00               ` Dale Stanbrough
     [not found]         ` <5j0e5i$qgi@bcrkh13.bnr.ca>
1997-04-16  0:00           ` Matthew Givens
     [not found]           ` <5j4ijn$3ta1@news.knox.edu>
1997-04-17  0:00             ` Kaz Kylheku
1997-04-18  0:00               ` Tim Behrendsen
     [not found]           ` <33552C53.41C6@cca.rockwell.com>
1997-04-20  0:00             ` Steve Doiel
1997-04-20  0:00               ` Jay Martin
1997-04-21  0:00             ` Robert I. Eachus
1997-04-11  0:00     ` Terry Colligan
1997-04-11  0:00       ` Larry J. Elmore
1997-04-12  0:00         ` Terry Colligan
1997-04-11  0:00   ` James Youngman
1997-04-11  0:00     ` Steve Summit
1997-04-12  0:00       ` Dave Wood
1997-04-14  0:00         ` Chris Lomont
1997-04-16  0:00           ` Dave Wood
1997-04-11  0:00   ` Gary W Smith
1997-04-14  0:00   ` Alan Brain
1997-04-17  0:00   ` Jon S Anthony
1997-04-10  0:00 ` Thomas Aho
1997-04-10  0:00 ` Bob Stout
1997-04-10  0:00 ` Matthew Heaney
1997-04-14  0:00 ` Steve Jones - JON
1997-04-14  0:00   ` Kaz Kylheku
1997-04-15  0:00   ` Matthew Givens
1997-04-20  0:00     ` Alan Brain
     [not found]     ` <335ae79e.55ed@dynamite.com.au>
1997-04-20  0:00       ` Matthew Givens
1997-04-28  0:00         ` Andrew Dunstan
1997-04-29  0:00           ` Matthew Givens
1997-05-06  0:00             ` Andrew Dunstan
1997-05-07  0:00               ` Kevin Cline
1997-05-07  0:00                 ` Jon S Anthony
1997-05-07  0:00                 ` Jeff Carter
1997-05-08  0:00                 ` Robert I. Eachus
1997-05-09  0:00                   ` Kevin Cline
1997-05-09  0:00                     ` John G. Volan
1997-05-11  0:00                       ` Kevin Cline
1997-05-12  0:00                         ` John G. Volan
1997-05-12  0:00                         ` John G. Volan
1997-05-13  0:00                         ` Alan Brain
1997-05-14  0:00                           ` Kevin Cline
1997-05-16  0:00                             ` Alan Brain
1997-05-17  0:00                               ` Dale Stanbrough
1997-05-17  0:00                               ` Kevin Cline
1997-05-17  0:00                                 ` John G. Volan
1997-05-18  0:00                                   ` Kevin Cline
1997-05-18  0:00                                     ` Jon S Anthony
1997-05-18  0:00                                       ` Brian Rogoff
1997-05-19  0:00                                       ` Kevin Cline
1997-05-19  0:00                                         ` Jon S Anthony
1997-05-19  0:00                                     ` John G. Volan
1997-05-20  0:00                                       ` Kevin Cline
1997-05-20  0:00                                         ` Jeff Carter
1997-05-21  0:00                                       ` Brian Rogoff
1997-05-21  0:00                                         ` STL in Ada95 [was: Any research putting c above ada?] John G. Volan
1997-05-22  0:00                                           ` Brian Rogoff
1997-05-23  0:00                                             ` Jon S Anthony
1997-05-24  0:00                                               ` Brian Rogoff
1997-05-22  0:00                                           ` Brian Rogoff [this message]
1997-05-23  0:00                                             ` Iterator Syntax [was: Re: STL in Ada95] Jeff Carter
1997-05-23  0:00                                               ` John G. Volan
1997-05-23  0:00                                               ` Michel Gauthier
1997-05-23  0:00                                               ` Brian Rogoff
1997-05-21  0:00                                       ` Any research putting c above ada? Alan Brain
1997-05-12  0:00                       ` Robert I. Eachus
1997-04-30  0:00           ` Daniel P Hudson
1997-04-30  0:00             ` Adam Beneschan
1997-05-02  0:00               ` Daniel P Hudson
     [not found] ` <5j078b$b25$1@NNTP.MsState.Edu>
1997-04-16  0:00   ` Peter Amey
     [not found]     ` <5j31lj$qnk@huron.eel.ufl.edu>
1997-04-24  0:00       ` Suzette Norby
1997-04-25  0:00         ` Kaz Kylheku
1997-04-26  0:00           ` Mike Haertel
1997-04-26  0:00             ` Kaz Kylheku
1997-04-27  0:00             ` Nick Roberts
1997-04-28  0:00             ` Istvan.Simon
1997-04-26  0:00           ` Larry Wissig
1997-04-26  0:00             ` Nick Roberts
1997-04-26  0:00               ` Lawrence Kirby
1997-04-27  0:00                 ` b-see
1997-04-26  0:00             ` Kaz Kylheku
1997-04-28  0:00             ` Jon S Anthony
1997-04-27  0:00           ` Jerry van Dijk
1997-04-25  0:00         ` Craig Franck
1997-04-28  0:00           ` Jon S Anthony
1997-04-29  0:00             ` Andrew Koenig
1997-04-29  0:00               ` Tom Moran
1997-04-30  0:00               ` Robert I. Eachus
1997-05-01  0:00                 ` Alan Brain
1997-04-30  0:00               ` Jon S Anthony
1997-05-01  0:00                 ` Kaz Kylheku
1997-04-30  0:00               ` Kaz Kylheku
1997-04-30  0:00             ` Craig Franck
1997-04-30  0:00               ` Robert I. Eachus
1997-04-30  0:00                 ` Pat Rogers
1997-05-02  0:00                 ` Jon S Anthony
1997-05-01  0:00               ` Jon S Anthony
1997-04-17  0:00   ` Daniel P Hudson
     [not found]   ` <335458A4.4C1D@worldnet.att.net>
     [not found]     ` <5j416b$hau@mtinsc04.worldnet.att.net>
1997-04-18  0:00       ` Mark & Zurima McKinney
1997-04-19  0:00         ` Craig Franck
1997-04-21  0:00           ` Robert I. Eachus
     [not found]     ` <5j30oa$ia9@bcrkh13.bnr.ca>
     [not found]       ` <3355739E.7B24@pratique.fr>
1997-04-18  0:00         ` Kaz Kylheku
1997-04-23  0:00       ` David Emery
1997-04-17  0:00 ` Jon S Anthony
1997-04-17  0:00 ` Chris Morgan
1997-04-17  0:00 ` Jon S Anthony
1997-04-18  0:00 ` David Emery
1997-04-21  0:00   ` Jim Hyslop
replies disabled

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