From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Amount of copying on returned constant objects
Date: Sat, 16 Jun 2007 08:48:04 +0200
Date: 2007-06-16T08:47:58+02:00 [thread overview]
Message-ID: <15bf7x8niwgcz.horig9zyjn4p.dlg@40tude.net> (raw)
In-Reply-To: 5dfsfnF1qav8bU1@mid.individual.net
On Fri, 15 Jun 2007 19:19:00 +0300, Alex R. Mosteo wrote:
> I know that some "in" arguments may be passed as copies or as references, at
> compiler discretion (this is one of these things that "programmers
> shouldn't care about", many times quoted).
>
> I wonder however about results of functions, that are not modified. Look for
> example at the Element function of the new Ada.Containers. They return the
> stored item, that may well be a quite large controlled tagged type, for
> example.
>
> Now, many times I want to query an element just for read-only purposes. I'm
> faced with two options:
>
> 1) Just call Element on the container Key/Index, and be done with it.
>
> 2) Do a Find+Query_Element, which requires defining an extra procedure and
> somewhat breaks the flow of control, but ensures no copying.
>
> I tend to go with 1) because of laziness and the "no premature optimization"
> rule. In C++ I could use constant references. Now, I wonder if
>
> a) is there something in the ARM that prevents an equivalent transparent
> optimization in the Ada side (returning the reference when it is detected
> that the returned object is not modified)?
No [*], but a way to help the compiler to know what you wanted is:
declare
Item : Element renames Get (Collection, Key);
-- Please, don't make new objects, if you can
begin
... -- Use Item
> Thanks in advance, have a nice week-end.
Same to you.
---------------
* In Ada 95 there were limited types returned strictly by reference, but
this semantics was crapped in Ada 2005.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2007-06-16 6:48 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-15 16:19 Amount of copying on returned constant objects Alex R. Mosteo
2007-06-15 16:32 ` Ludovic Brenta
2007-06-18 17:26 ` Alex R. Mosteo
2007-06-19 10:22 ` Alex R. Mosteo
2007-06-15 22:03 ` Georg Bauhaus
2007-06-18 17:23 ` Alex R. Mosteo
2007-06-18 17:35 ` Pascal Obry
2007-06-18 18:04 ` Alex R. Mosteo
2007-06-18 20:25 ` Randy Brukardt
2007-06-19 8:26 ` Dmitry A. Kazakov
2007-06-19 10:24 ` Alex R. Mosteo
2007-06-19 21:33 ` Randy Brukardt
2007-06-20 1:31 ` Markus E Leypold
2007-06-20 6:25 ` Georg Bauhaus
2007-06-20 13:00 ` Markus E Leypold
2007-06-20 7:34 ` Dmitry A. Kazakov
2007-06-18 18:34 ` Georg Bauhaus
2007-06-16 6:48 ` Dmitry A. Kazakov [this message]
2007-06-18 17:14 ` Alex R. Mosteo
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox