From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: References vs access types
Date: Fri, 31 May 2019 18:55:53 +0200
Date: 2019-05-31T18:55:53+02:00 [thread overview]
Message-ID: <qcrmap$j58$1@gioia.aioe.org> (raw)
In-Reply-To: qcri52$1tn$1@dont-email.me
On 2019-05-31 17:44, Alejandro R. Mosteo wrote:
> Sorry if I asked something similar in the past. I have a foggy memory of
> having wanted to do so. I have also checked some old threads that
> tangentially touch my question but without direct explanation.
>
> So, part of the point of reference types is to be able to return an item
> "by reference" without being able to store the pointer:
>
> type Item;
> type Item_Access is access Item;
>
> type Reference (Ptr : access Item) is limited null record;
>
> function Get (...) return Reference; -- (1)
>
> In Gem #107 this is said as advantageous against, for example,
>
> function Get (...) return Item_Access; -- (2)
>
> because "access discriminants are unchangeable. The discriminant also
> cannot be copied to a variable [like Item_Access]" [1].
>
> Now, without thinking much about it, while fighting old bugs, I have
> sometimes replaced a problematic Reference with
>
> function Get (...) return access Item; -- (3)
>
> And here comes the question: besides losing the ability to use aspects
> on the Reference type, or using it for some fancy refcounting, does (3)
> give the same safeties wrt to copying as (1)? Are there any other hidden
> traps in (3) (assuming the pointee thread-safety/lifetime is properly
> managed)?
>
> Or, put it another way, is (1) always preferable? Or may (3) suffice for
> simple uses?
My preferences list would be:
#1 - Never, visually ugly, semantically questionable, lacking
transparent access to the target object and technically not a reference
at all, plus unstable with GNAT compilers
#2 - Construction of new stand-alone objects (frequently class-wide),
implementation-dependent stuff
#3 - Access to a component of an existing object
As for hidden traps, only #3 is safe upon inheritance, if primitive
operation and thus covariant.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2019-05-31 16:55 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-31 15:44 References vs access types Alejandro R. Mosteo
2019-05-31 16:55 ` Dmitry A. Kazakov [this message]
2019-05-31 23:55 ` AdaMagica
2019-05-31 23:56 ` AdaMagica
2019-05-31 21:33 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox