From: Blady <p.p11@orange.fr>
Subject: Re: Equivalence between named access and anonymous access.
Date: Thu, 7 Sep 2023 18:06:15 +0200 [thread overview]
Message-ID: <udcsdo$31uib$1@dont-email.me> (raw)
In-Reply-To: <uda7c1$2ids2$1@dont-email.me>
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.
next prev parent reply other threads:[~2023-09-07 16:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-06 14:37 Equivalence between named access and anonymous access Blady
2023-09-06 15:54 ` Dmitry A. Kazakov
2023-09-07 16:06 ` Blady [this message]
2023-09-07 16:18 ` Jeffrey R.Carter
2023-09-07 19:10 ` Blady
2023-09-07 20:23 ` Dmitry A. Kazakov
2023-09-06 20:55 ` Gautier write-only address
2023-09-07 0:20 ` Jeffrey R.Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox