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: fac41,953e1a6689d791f6 X-Google-Attributes: gidfac41,public X-Google-Thread: 103376,953e1a6689d791f6 X-Google-Attributes: gid103376,public From: eachus@spectre.mitre.org (Robert I. Eachus) Subject: Re: Eiffel and Java + Ada dispatching Date: 1996/11/14 Message-ID: #1/1 X-Deja-AN: 196377811 references: organization: The Mitre Corp., Bedford, MA. newsgroups: comp.lang.eiffel,comp.lang.ada Date: 1996-11-14T00:00:00+00:00 List-Id: In article donh@syd.csa.com.au (Don Harrison) writes: > Okay but the problem I have with this is that picking up the local > stuff implicitly as parameters to the instantiation is potentially > confusing (as your example demonstrates). What would be clearer > and less confusing, IMO, would be to declare the parametric > information in a type together with the operation so that when you > instantiate (explicitly) with that type (or a descendant type), > you get the right operation with it. This way, it's very plain > what the actual instantiation parameters are. In Ada, the default for generics is that you get the "predefined" operations for the class. But if you explicitly pass the operation as a generic formal, you can override the standard definition. No surprise there either. The suprise in the construct I demonstrated is that it is possible to define generics that are sensitive to the environment where they are instantiated. And yes, it is a very useful feature, and should be used very carefully. I have written several Ada 83 libraries where generics have use this feature extensively, and have as many as thirty formal parameters. Since the packages are intended to be useful, they also are designed so that most of the generic formals have default values, so the instantiations only need a few lines. But it is a high (and almost lanaguage independent) talent to observe the principle of least surprise. > If the non-overloading versions are exponentially larger, maybe > the originals were a bit dodgy anyway. :) No, but the most extreme case I know of was real portmanteau code. Generic instantiations with other generic instantiations as parameters, about four levels deep. But any other way of writing the code would have required millions of lines of code. The several thousand generic instantiations weren't easy to debug and test, but much much better than any million line monstrosity would have been. Just don't use the powerful features for the easy jobs, save them for when and where they are needed. > IMHO, overloading should have no semantic impact. It should merely be > 'syntactic sugar' as Jean-Marc suggested. Nice dream, but...the fact that horses are a good way to commute shouldn't lead to the outlawing of jet planes for intercontinental travel. However, you do need to make sure that the airplane pilot knows how to fly. ;-) -- Robert I. Eachus with Standard_Disclaimer; use Standard_Disclaimer; function Message (Text: in Clever_Ideas) return Better_Ideas is...