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,2ea02452876a15e1 X-Google-Attributes: gid103376,public From: Bernd Holzmueller Subject: Re: Choice of OO primitives in Ada95 Date: 1996/02/22 Message-ID: <312C236B.2344@informatik.uni-stuttgart.de>#1/1 X-Deja-AN: 140608249 references: <4gc2pu$6qj@ux1.lmu.edu> content-type: text/plain; charset=us-ascii organization: University of Stuttgart mime-version: 1.0 newsgroups: comp.lang.ada x-mailer: Mozilla 2.0 (X11; I; SunOS 5.3 sun4m) Date: 1996-02-22T00:00:00+00:00 List-Id: Ray Toal wrote: > > donh@syd.csa.com.au (Don Harrison) wrote: > > >1) Why should you have to specify that a type is 'tagged'? Can't the compiler work > >that out for itself? eg. by seeing whether the type is extended elsewhere. The > >developer is forced to worry about what should be an implementation issue. > > Requiring 'tagged' is a GOOD THING! Inheritance weakens encapsulation. > The default case (no tagged) is that you design a type, and you > provide all and only those operations that work on the type and you > don't make any details available to anyone else - in short you > fully control the type. Now if your intent is to ALLOW derivation > then you must mark it tagged. This alerts the reader that this > type may be derived from. Imagine a language in which you could > inherit from any type you wanted to! :-) Whether or not a type > should be tagged is a DESIGN decision; I totally disagree that it > should be an implementation decision. By the way a compiler can not > in general determine if the "type is extended elsewhere" since in > Ada extensions can appear in other compilation units. Actually, the compiler _can_ work out if a tag is necessary. This is the case only if a type is used polymorphically, i.e., class-wide in Ada 95 terminology (and has _nothing_ to do with type-extension). A different implementation model than is given in the LRM would create a tag only in these cases, which would allow 'normal' (monomorphic) uses of a tagged type be as efficient as the use of an untagged type. The consequence is that a special kind of "tagged types" is not necessary if efficiency is of concern. This is discussed in more detail in a paper at Ada-Europe 96. Regarding the requirement to mark a type tagged to control type extension: I cannot see any advantage in restricting the flexibility (in the sense of potential reuse) of the language without gaining anything. Whether or not a programmer is going to use a type for type extension is not relevant for the author of the original type and should therefore not explicitly prohibitable by him. It could be of interest for a _user_ of the original type because dispatching can be a concern, but not necessarily because he may wish to use this type only monomorphically, and thus no dispatching will ever occur. Bernd -- ----------------------------------------------------------------------------- Bernd Holzmueller, Institute of Computer Science, University of Stuttgart email : holzmuel@informatik.uni-stuttgart.de http://www.informatik.uni-stuttgart.de/ifi/ps/bernd.html -----------------------------------------------------------------------------