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-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,cda33fc7f63c2885 X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2002-01-19 09:01:15 PST Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!bloom-beacon.mit.edu!news-out.cwix.com!newsfeed.cwix.com!sjc-peer.news.verio.net!news.verio.net!iad-read.news.verio.net.POSTED!not-for-mail Message-ID: <3C49A5C4.51D6@li.net> From: Vincent Marciante X-Mailer: Mozilla 3.0 (OS/2; I) MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: Overridability of _private_ predefined "=" [was Re: list strawman] References: <6i%_7.8890$fG.50588@rwcrnsc51.ops.asp.att.net> <3C47E79E.7844@li.net> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Date: Sat, 19 Jan 2002 11:58:44 -0500 NNTP-Posting-Host: 168.191.118.131 X-Complaints-To: abuse@verio.net X-Trace: iad-read.news.verio.net 1011459609 168.191.118.131 (Sat, 19 Jan 2002 17:00:09 GMT) NNTP-Posting-Date: Sat, 19 Jan 2002 17:00:09 GMT Organization: Verio Xref: archiver1.google.com comp.lang.ada:19102 Date: 2002-01-19T11:58:44-05:00 List-Id: > Christoph Grein wrote: > Please, before going into further discussions about reemergence of predefined > operations and thinking about changing the language, read the corresponding > chapters in the AARM (the Annotated Ada Reference Manual), e.g. > AARM 4.5.2(24a-c). I have read that. > With respect to "block compare", I'm sorry, I think that I should have said 'usage of predefined "=" for composite types that have componants of a private type'. > this is not possible for tagged types, floating > point types if there are signed zeros, and who knows for which other cases. So, in addition to what Mark Lundquist wrote: Mark Lundquist wrote: > > > > > generic > > type Element is private; > > with function "=" (Left, Right : Element) return Boolean is <>; > > package Containers.Lists.Unbounded is > > > > This allows users who have unconventional ideas of equality to provide > > their own routine, without requiring "normal" users to specify the > > equality function explicitly. > > Indeed it's a bug in Ada95 if the generic uses "=" without importing it > explicitly. Otherwise, an overridden "=" is not visible to the generic, and > predefined equality "reemerges". it seems to also be a bug in Ada95 if the generic uses predefined "=" of any composite types that have componants whose type is that of an imported private type. Right? > Thus it is generally a bad idea to override predefined operators for non-tagged > types. If this is really necessary, then utmost care has to be applied > everywhere such a type is used (e.g. as components of an array). This is why I find the situation to be so bad now. A generic written for Ada 83 that only imports a private type can not be made into a valid Ada 95 one by simply transforming its spec by adding the importation of "=" for that type; Its body must also be analyzed and possibly changed so as to use componant by componant comparison for any composite types having the private type as a componant (or predefined "=" has to be overridden for those composite types _and_ any other composite types the have those composite types as componants.) What was impossible (?) to do wrong in Ada 83 has now become a pitfall in Ada 95. were by we have to dilligently follow the verbal guideline that you just suggested. > Reemergence has been introduced in the first place to avoid incompatibilities > with Ada83. I have read this but I have not seen the statement of the incompatibilities that were avoided. Can someone point me to that information? I must really be missing something (and I do want to understand what it is if I am.) > >Christoph Grein > > Vincent Marciante wrote: >> Its even worse than just that. Now a "block compare" of any composite >> type >> that has a nontagged private type as a componant is questional because >> that >> comparison will utilize the predefined "=" of the private type even >> though >> the creator of the private type may have seen it proper to overridden >> it. >> >> There was a thread, gosh, I guess less than two years ago where I was >> trying to >> argue that this was a disaster wrt generics and that reemergence of "=" >> seemed >> to be a special case wrt the whole reemergence issue. I now feel that >> the >> situation is very bad in general as opposed to being bad only wrt >> generics. >> >> Does anyone think that it would be good for there to be a change in the >> language such that for private types, if a primative "=" returning >> boolean exists then it >> should be the "=" used as part of block compares and that the predefined >> one >> should not reemerge in generics? This would not have been incompatible >> with >> Ada83, right? >> >> I hope that the above is not perceved as rehashing old arguments - I do >> not >> remember the issues having been discussed exactly as above. >> >> Vincent Marciante