comp.lang.ada
 help / color / mirror / Atom feed
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.



  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