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=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "Alejandro R. Mosteo" Newsgroups: comp.lang.ada Subject: Re: 'Class'Class'Class'Class ad libitum Date: Tue, 13 Sep 2016 18:10:12 +0200 Organization: A noiseless patient Spider Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Tue, 13 Sep 2016 16:10:09 -0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="bc686c1890d5fda24d69bb608fea27b4"; logging-data="11734"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/A96F6nbA/QS+oHM7MXbOX" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 In-Reply-To: Cancel-Lock: sha1:0sLe3ICho/C8MCxD0t7wZc7WUVs= Xref: news.eternal-september.org comp.lang.ada:31773 Date: 2016-09-13T18:10:12+02:00 List-Id: On 13/09/16 14:37, Dmitry A. Kazakov wrote: > On 13/09/2016 12:43, Alejandro R. Mosteo wrote: >> I get why this is legal: >> >> type X is tagged null record; >> >> subtype Y is X'Class; >> >> subtype Z is X'Class'Class'Class'Class; >> >> But can you think of any legitimate reason to use it besides obfuscation? > > Only the latter is wrong. X'Class'Class cannot be same as X'Class. > > X is a set of values with operations on X > > X'Class is a set of values of X and values of all types derived from X > > X'Class'Class should be a set of values of X'Class and values of all > types derived from X'Class. We cannot derive from X'Class in Ada, so > class of X'Class holds only X'Class. But that does not make them same. > Like X is not same as X'Class even if there is no descendants of X. > Class-wide operations of X would be primitive operations of X'Class'Class. I see that from a strict theoretic POV. However, that's not the interpretation that current Ada grammar does, right? Actually I arrived at this because I am somewhat wary of the fact that using a subtype like Y in my example hides the fact to the reader that the type is class-wide and hence dispatching by default. Furthermore, you can legally write procedure Blah (This : Other_Package.Y); -- or procedure Blah (This : Other_Package.Y'Class); and AFAIK that's totally equivalent but the former is less informative (and alas, shorter to write). First time I wrote the later I expected to get an error or warning of the short "subtype is already class-wide". Álex.