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=-3.2 required=3.0 tests=BAYES_00,FREEMAIL_FROM, NICE_REPLY_A,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 Path: eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Blady Newsgroups: comp.lang.ada Subject: Re: Equivalence between named access and anonymous access. Date: Thu, 7 Sep 2023 18:06:15 +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: Thu, 7 Sep 2023 16:06:17 -0000 (UTC) Injection-Info: dont-email.me; posting-host="4eed53ccae3c2f0e3aa01f2971e54c1e"; logging-data="3209803"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+ZkCSlUvC6iqo/rTUUHDIP" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Cancel-Lock: sha1:+MJ/4gZQvhgb8xg+42wNk+KhCCY= In-Reply-To: Content-Language: en-US Xref: news.eternal-september.org comp.lang.ada:65614 List-Id: Le 06/09/2023 à 17:54, Dmitry A. Kazakov a écrit : > On 2023-09-06 16:37, Blady wrote: > >> I'm wondering about named access and anonymous access. >> In the following Ada code, are the writing of parameter P1 type of >> procedures PA and PB equivalent ? >> >> package C1 is >>    type Inst is tagged null record; >>    type Class is access all Inst'Class; >> end C1; >> >> with C1; >> package C2 is >>    type Inst is tagged null record; >>    type Class is access all Inst'Class; >> >>    procedure PA (Self : Inst; P1 : C1.Class); -- named access >>    procedure PB (Self : Inst; P1 : access C1.Inst'Class); -- anonymous >> access >> end C2; >> >> Same with: >>    function FA (Self : Inst) return C1.Class; -- named access >>    function FB (Self : Inst) return access C1.Inst'Class; -- anonymous >> access >> >> Are FA and FB writing equivalent? >> If not why? > > They are not equivalent from the access checks point of view: > >    declare >       Y : C2.Inst; >       X : aliased C1.Inst; >    begin >       C2.PA (Y, X'Access); -- Non-local pointer error >       C2.PB (Y, X'Access); -- Fine >    end; > > Furthermore, tagged anonymous access is controlling (dispatches) when > not class-wide. > Thanks Dmitry, also Gautier and Jeff for your previous answers, Well, I was questioning myself about the choice between named access and anonymous access in the old Ada port of Java library, for instance: type Typ; type Ref is access all Typ'Class; type Typ(LayoutManager2_I : Java.Awt.LayoutManager2.Ref; Serializable_I : Java.Io.Serializable.Ref) is new Java.Lang.Object.Typ with null record; ------------------------------ -- Constructor Declarations -- ------------------------------ function New_BorderLayout (This : Ref := null) return Ref; function New_BorderLayout (P1_Int : Java.Int; P2_Int : Java.Int; This : Ref := null) return Ref; ------------------------- -- Method Declarations -- ------------------------- procedure AddLayoutComponent (This : access Typ; P1_Component : access Standard.Java.Awt.Component.Typ'Class; P2_Object : access Standard.Java.Lang.Object.Typ'Class); function GetLayoutComponent (This : access Typ; P1_Object : access Standard.Java.Lang.Object.Typ'Class) return access Java.Awt.Component.Typ'Class; Why choosing named access for New_BorderLayout and anonymous access for AddLayoutComponent or GetLayoutComponent for the type of parameters P1_xxx and the return type? Why not all named or all anonymous ? Thanks, Pascal.