comp.lang.ada
 help / color / mirror / Atom feed
From: "Alex R. Mosteo" <devnull@mailinator.com>
Subject: Amount of copying on returned constant objects
Date: Fri, 15 Jun 2007 19:19:00 +0300
Date: 2007-06-15T19:19:00+03:00	[thread overview]
Message-ID: <5dfsfnF1qav8bU1@mid.individual.net> (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.



             reply	other threads:[~2007-06-15 16:19 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-15 16:19 Alex R. Mosteo [this message]
2007-06-15 16:32 ` Amount of copying on returned constant objects 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
replies disabled

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