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,2afac1a4161c7f35 X-Google-Attributes: gid103376,public From: Brian Rogoff Subject: Re: Distinguishing type names from other identifiers Date: 1998/01/29 Message-ID: #1/1 X-Deja-AN: 320386774 References: <6v0LMGAjwIw0Ews0@dowie-cs.demon.co.uk> Content-Type: TEXT/PLAIN; charset=US-ASCII X-Trace: 886111573 28630 bpr 206.184.139.132 Mime-Version: 1.0 Newsgroups: comp.lang.ada Date: 1998-01-29T00:00:00+00:00 List-Id: On Wed, 28 Jan 1998, Matthew Heaney wrote: > In article , > Brian Rogoff wrote: > > >> ... quoting Matthew Heaney here ... > >> Another example is importing an active iterator as a generic formal type: > >> > >> generic > >> Max_Depth : in Positive; > >> package Stacks.Bounded is > >> > >> type Bounded_Stack is new Root_Stack with private; > >> ... > >> generic > >> type Source_Stack is new Root_Stack with private; > >> > >> type Source_Stack_Iterator (Stack : access Source_Stack'Class) is > >> new Root_Stack_Iterator with private; > >> > >> procedure Generic_Copy > >> (From : access Source_Stack'Class; > >> To : in out Bounded_Stack); > >> > >> end Stacks.Bounded; > > > >This is also OK, but I still don't see why you find the redundant _Type > >to be "noise" and the redundant _Stack, not-noisy. I find qualifiers like > >_Stack worse, since qualified package names already have that information. > >What's your thinking on this? > > I always use adjective+noun. A tagged type hierarchy always has this > convention: each derivation has a different adjective, but the noun is the > same. I never use package qualification to get the "real" name, because > the real name is always the name of the type. A package is just a > namespace - it is not a type. Right, I mistyped, and meant why Stack_Iterator rather than just Iterator or Iterator_Type ;-), since its obvious from the package scope that its a Stack_Iterator, and if you had Iterators over different collections you could use the qualified names. I certainly never confuse packages and types, and find Ada's separation of the two one of its most positive features. I'm not a big Eiffel fan, my favorite "other language" is ML. > The Root_ convention comes out the RM, and I have adopted it for > consistency with that document. The adjective+noun style also comes out of > the RM: it's what is used for types Bounded_String and Unbounded_String. Yes, I acknowledge that this is a reasonable basis for a style, though I prefer the _Type suffixes, and I combine the two all the time > You get the idea. Some guys name their abstract data type "Object" or > "Instance," but this is a horrible convention because it confuses the > concepts of type and module. Agreed. I may use _Class if the type is classwide, to distinguish between a classwide and non-classwide type, but I haven't yet. > Some Ada programmers actually think that a > class in C++ or Eiffel maps to an Ada package! I've seen this in an Ada 95 book. Once again, I agree that it is horrible. > A class in C++ is the equivalent of an Ada tagged type. Yes, I know that > in other languages a class does double-duty as a module and type, but in > Ada they are orthogonal language features. Even in C++, the namespace feature was eventually added, and many language designers now acknowledge that module and type should be separate features. I think in some ways the addition of OO features to Ada was simply brilliant, and some decisions that are criticized, like the function syntax instead of the dot syntax, will be well received in the future. It leaves the door open for the addition of (possibly restricted) multiple dispatch in the future. -- Brian