comp.lang.ada
 help / color / mirror / Atom feed
* Amount of copying on returned constant objects
@ 2007-06-15 16:19 Alex R. Mosteo
  2007-06-15 16:32 ` Ludovic Brenta
                   ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Alex R. Mosteo @ 2007-06-15 16:19 UTC (permalink / raw)


Hello,

before I go digging into assembler listings I'd like to ask here in case
someone has the answer ready.

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)?

b) If not, do you know of compilers that do this in practice? (Specially
interesting for me would be GNAT at -O2/-O3).

Failing these, I guess I could define constant accesses for use in my own
functions, but I find this not very Ada-like. Any other ideas?

Thanks in advance, have a nice week-end.



^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2007-06-20 13:00 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
2007-06-18 17:14   ` Alex R. Mosteo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox