From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Smart pointers and delegation
Date: Thu, 10 Aug 2017 19:17:39 -0500
Date: 2017-08-10T19:17:39-05:00 [thread overview]
Message-ID: <omit34$sqg$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: omh3iv$1flt$1@gioia.aioe.org
"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
news:omh3iv$1flt$1@gioia.aioe.org...
> On 2017-08-10 00:57, Randy Brukardt wrote:
...
>> Even if true, the "real problem" however remains. If you can safely and
>> efficiently copy the designated object, then you have no need for
>> Implicit_Dereference. If you need "return-by-reference", though, you need
>> some special mechanism to do that.
>
> I don't want
>
> A (I) := X;
>
> taken literally. That is an abstraction inversion. I want it compiled into
> more useful
>
> Set (A, I, X);
But these are subtly different. The procedure form can only update the
entire element at once. (Given the potentially large number of
subcomponents, it would be impractical to implement a procedure for each
one -- and if you want the compiler to do it, you'd have to be able to
write - within the language - how that's done, which brings back the
original question.)
Specifically, if you write:
A (I).C := Y;
there isn't any translation using Set that would do the right thing. (Using
an implicit temporary for the entire object would force extra copying, which
would have performance and tasking implications - it would be outright wrong
for volatile/atomic objects.)
> My design of containers is that I effectively put a reference in the form
> of a smart pointer into the container. I don't need return by reference
> because I return a smart pointer, which is definite and non-limited. I
> have no problem with life time because the reference holds the object. I
> less problems with concurrent updates because the reference has a count so
> that the update may deploy a transaction scheme. And I tend to hide the
> referenced object type from public interface to make it more safe.
Not sure I see how a "smart pointer" would work in this context. I could
imagine some sort of handle working if you don't need partial, in-place
updates. To do that, you have to merge the object interface and the
container interface; as I noted I sometimes have done designs that way, I
just don't call the handle a "smart pointer".
Randy.
next prev parent reply other threads:[~2017-08-11 0:17 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-01 10:32 Smart pointers and delegation Dmitry A. Kazakov
2017-08-01 15:06 ` Dmitry A. Kazakov
2017-08-01 23:06 ` Randy Brukardt
2017-08-02 6:20 ` Dmitry A. Kazakov
2017-08-03 3:36 ` Randy Brukardt
2017-08-03 7:40 ` Dmitry A. Kazakov
2017-08-04 23:03 ` Randy Brukardt
2017-08-05 8:33 ` Dmitry A. Kazakov
2017-08-07 22:39 ` Randy Brukardt
2017-08-08 6:27 ` Dmitry A. Kazakov
2017-08-09 0:27 ` Randy Brukardt
2017-08-09 7:37 ` Dmitry A. Kazakov
2017-08-09 22:57 ` Randy Brukardt
2017-08-10 7:56 ` Dmitry A. Kazakov
2017-08-11 0:17 ` Randy Brukardt [this message]
2017-08-11 6:43 ` Dmitry A. Kazakov
2017-08-11 20:37 ` 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