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-Thread: 103376,9fb8e2af320d5b3e X-Google-Attributes: gid103376,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news4.google.com!feeder1-2.proxad.net!proxad.net!feeder2-2.proxad.net!newsfeed.arcor.de!newsspool4.arcor-online.net!news.arcor.de.POSTED!not-for-mail Date: Sat, 30 Jun 2007 15:14:39 +0200 From: Georg Bauhaus Organization: # User-Agent: Thunderbird 1.5.0.12 (Macintosh/20070509) MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: Bus error References: <0367891DA5DA7E408D42A860FA002F44B0CC48@sma2901.cr.eurocopter.corp> <1l4yqvxoid4n1.1u8eo4oo8ml4m$.dlg@40tude.net> <4685280c$0$14869$9b4e6d93@newsspool4.arcor-online.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Message-ID: <46865672$0$23136$9b4e6d93@newsspool1.arcor-online.net> NNTP-Posting-Date: 30 Jun 2007 15:11:15 CEST NNTP-Posting-Host: fd06f169.newsspool1.arcor-online.net X-Trace: DXC=4PiW?BMHfcmJ00P1S40fZgic==]BZ:afn4Fo<]lROoRaFl8W>\BH3YbTf^4jln3KOkA:ho7QcPOVcgMAOmdVN:JnEQ8`\ZC@iJk X-Complaints-To: usenet-abuse@arcor.de Xref: g2news1.google.com comp.lang.ada:16352 Date: 2007-06-30T15:11:15+02:00 List-Id: Dmitry A. Kazakov wrote: > On Fri, 29 Jun 2007 17:44:22 +0200, Georg Bauhaus wrote: > >> Dmitry A. Kazakov wrote: >>> On Fri, 29 Jun 2007 11:35:28 +0200, Duncan Sands wrote: >>> >>>> in Ada 95 you could do >>>> >>>> X : T renames Factory; >>> Yes, you're right. It should be illegal. Semantically it is same as >>> >>> X : Integer renames 1; -- Illegal >> I don't think that renaming an object is the same as renaming >> a number literal because the literal isn't declared anywhere. >> Wheras I could say that a returned object is declared as part >> of the function declaration. > > Oh, if that is a problem then take this instead: > > X : Integer renames -1; -- Still illegal, though not a literal If I had anything to contribute, my programming language would never have elementary school writing modes built in because this triggers these kinds of discussions. > But clearly your argument is nonsensical, literal is a syntactic element, > of which semantics is as much object as any of any other expression. If the semantics of object renaming is that an object is renamed, and a number literal is somehow not an object, I see a difference. If we can have renamings of expressions, OK, let us have let bindings; However, what is their 'Access? > It > would be a very perverse idea to try to draw a line between literals and > non-literals. What is a possible alternative? > Note also that Ada's renaming has conceptually little to do > with objects. Consider: > > X : T; > X : T renames X; -- Illegal > > though the "object" is obviously same. Same object, same name, what was > wrong? A programmer construing strange assumptions about the possibility of duplicate names in a declarative part of an Ada program, I'd say. >>> function Very_Positive return Integer is >>> begin >>> return -1; >>> end Very_Positive; >>> >>> Oops : Positive renames Very_Positive; -- This is OK! >> So is >> >> if 42 not in Boolean'pos(false) .. Boolean'pos(true) then >> raise Constraint_Error; >> end if; > > You missed the point. The renaming in my example shall *not* raise > Constraint_Error. It is a clear language design fault. Oops will at some point raise Constraint error; how can a compiler be supposed to known that some Integer function will *always* return non-Positives? What makes you think that the programmer who has written the Oops doesn't know what he is doing using a subtype, not a new type? I think it is a program design fault, if a fault at all (or a flaw as Bub Duff notes). Subtypes are not new types, a compiler is not a program proof program, and less so when the programmer writes about overlapping value ranges, not types. For contrast, Whatever: Boolean renames Halt(Main'access); -- legal (Make Halt an ASIS function that can call the compiler if you like.)