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=0.7 required=5.0 tests=BAYES_00,INVALID_DATE, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 Path: utzoo!utgpu!watmath!clyde!att!rutgers!sri-unix!trent From: trent@unix.SRI.COM (Ray Trent) Newsgroups: comp.lang.ada Subject: Re: Collective response to := messages Message-ID: <24934@sri-unix.SRI.COM> Date: 1 Dec 88 21:31:47 GMT References: <24856@sri-unix.SRI.COM> <755@marvin.cme-durer.ARPA> Reply-To: trent@unix.sri.com (Ray Trent) Organization: SRI, Menlo Park, CA. List-Id: In the above article leake@cme-durer.ARPA (Stephe Leake) writes: >does. It seems to me, therefore, that he is talking about 2 data >types; LCD_Fractions and Fractions. This removes the need to overload Indeed, this is the case. I explained that type Fraction was not a particularly good example, and why I used it anyway. I mostly object to the internal inconsistancies of Ada...exceptions to the rules for "special" operators, the non-object status of certain types of procedural objects and not others, disallowing user definition of attributes, the wierdnesses inherent in the "use" clause that make it almost useless, the fact that Ada is supposed to be strongly typed, but that uninitialized variables of a type are not required to contain a valid value in the range of that type, and are also not required to contain an *invalid* value, etc., etc. >Ray Trent says: > > The LRM explicitly says that intermediate > > results need not follow the constraints of the ADT. >Where does it say this? LRM 11.6 [6] states: Similarly, additional freedom is left to an implementation for the evaluation of numeric simple expressions. For the evaluation of a predefined operation, an implementation is allowed to use the operation of a type that has a range wider than that of the base type of the operands, provided that this delivers the exact result, even if some intermediate results lie outside the range of the base type. They only explicitly allow this for predefined operations, though it's ambiguous enough that vendors are likely to allow it for user-defined operations as well. (and it's kind of hard to test) I object to "special" properties of language constructs that I am not "allowed" as a programmer to use or duplicate in my own types, subprograms, etc., in any event. -- "Our little lives get complicated It's a simple thing Simple as a flower And that's a complicated thing" ../ray\..