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.