From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on ip-172-31-65-14.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00,T_SCC_BODY_TEXT_LINE, XPRIO autolearn=ham autolearn_force=no version=3.4.6 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: "Randy Brukardt" Newsgroups: comp.lang.ada Subject: Re: New aggregates with Ada 2022. Date: Wed, 22 Jun 2022 20:10:06 -0500 Organization: A noiseless patient Spider Message-ID: References: Injection-Date: Thu, 23 Jun 2022 01:10:08 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="3391b7818b792a0e7a169185c1208738"; logging-data="25693"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/dMwpj9iWmlyABDqqFNdzNXwfpa0mFdho=" Cancel-Lock: sha1:MR+R297p2vOsm6O9q70lHmIokhI= X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.7246 X-RFC2646: Format=Flowed; Response X-Newsreader: Microsoft Outlook Express 6.00.2900.5931 X-Priority: 3 X-MSMail-Priority: Normal Xref: reader02.eternal-september.org comp.lang.ada:64016 List-Id: "Dmitry A. Kazakov" wrote in message news:t8ujnr$1hvf$1@gioia.aioe.org... > On 2022-06-22 01:39, Randy Brukardt wrote: >> "Dmitry A. Kazakov" wrote in message >> news:t8qrmo$p79$1@gioia.aioe.org... >> ... >>> 1. Built-in operations -> hiding: >>> >>> type T is private; >>> function "+" (Left, Right : T) return T; -- Perfectly legal >>> private >>> type T is range 1..100; >>> >>> 2. Primitive operations -> overriding. >> >> BTW, these two are really the same thing. In the first example, the "+" >> is >> overriding the predefined operation. > > Yes, they should be in a better world. A primitive operation is always > reachable. The case above works differently from: > > type T is private; > overriding > function "+" (Left, Right : T) return T is abstract; > > But this is a deeper problem of having such operations primitive. > >> But note an important difference here from the aggregate case: in no case >> is >> an operation available for the private type that is *not* available for >> the >> full view. Since the syntax and semantics of container aggregates and >> array >> aggregate are subtly different (they are as close as we could make them, >> but >> that is not that close), there definitely are things that would be only >> possible when written for the private view. That would be new for Ada. So >> while a definition could be made, it would be confusing in some cases. >> And >> this case isn't useful enough to make that effort. > > Much could be resolved by attributing proper types to all assumed or real > intermediate steps: > > type T is private; > function "+" (Left, Right : T) return T; > private > type T_Parent is range 1..100; > type T is new T_Parent; Don't think this changes anything (at least not in Ada as it stands), since that is essentially the meaning of "range 1 .. 100": type Some_Int is range 1 .. 100; means type Some_Int is new range 1 .. 100; Randy.