comp.lang.ada
 help / color / mirror / Atom feed
From: jimmaureenrogers@worldnet.att.net (Jim Rogers)
Subject: Re: Pass by reference
Date: 8 Apr 2004 12:04:05 -0700
Date: 2004-04-08T12:04:05-07:00	[thread overview]
Message-ID: <82347202.0404081104.33d05af0@posting.google.com> (raw)
In-Reply-To: 19b0e504.0404080652.4eab9f80@posting.google.com

dan.r.mcleran@seagate.com (Dan McLeran) wrote in message news:<19b0e504.0404080652.4eab9f80@posting.google.com>...
> I am investigating using Ada for a project at work and I have a
> question I hope someone can answer. If I am interpreting the RM
> section 6.2 correctly, an array of elementary types does not meet the
> criteria of a by-reference type. But, when looking at the disassembly,
> it seems that passing an array of elementary types to a function as an
> in-mode parameter is passing by reference. Does this mean that an
> array of elementary types is an unspecfied type?

Ada provides some guidance to the compiler, but the general idea
is that the compiler is free to choose the most efficient parameter
passing mechanism for each instance.

If you specify an parameter (of any type) as an IN parameter you will
not be able to modify the array within the subprogram, no matter
how the compiler chooses to pass the parameter.

If you specify a parameter of any type as an OUT or IN OUT parameter
you will be able to modify its value within the procedure. This is
true even if the parameter is passed by value.

> 
> A 2nd part to my question is: Does Ada automatically pass tagged types
> by reference no matter what mode the parameter is specfied (in, in
> out, or out)? The language RM 6.2 seems to suggest this is so. If so,
> does this mean that there is no way to pass a tagged type by value? I
> believe C# works this way without programmer intervention.

Tagged types are typically passed by reference no matter what the
parameter mode. Why do you want to specify by value if you can
specify IN mode? Do you want to be able to modify the value locally
in the subprogram? In Ada you do that by copying the IN value to
a local variable in the subprogram. In this manner you are forcing the
creation of a local copy of the value, no matter how it was passed.

The Ada approach is most efficient if you only want to read, but not
write to, the IN parameter. It eliminates an unnecessary copy. If you
do want to read and locally modify the parameter Ada forces you to
explicitly make the copy implicitly made by C#, making your code no
less efficient than C# in that case.

Jim Rogers



  parent reply	other threads:[~2004-04-08 19:04 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-04-08 14:52 Pass by reference Dan McLeran
2004-04-08 18:21 ` Martin Krischik
2004-04-09 12:53   ` Dan McLeran
2004-04-13 12:42     ` Martin Krischik
2004-04-08 19:04 ` Jim Rogers [this message]
2004-04-09  3:24   ` Dan McLeran
2004-04-09  0:01 ` Stephen Leake
2004-04-09 12:38   ` Dan McLeran
2004-04-09 13:03     ` Dmitry A. Kazakov
2004-04-09 19:09       ` Dan McLeran
2004-04-10 10:49         ` Dmitry A. Kazakov
2004-04-11 12:43       ` Florian Weimer
2004-04-12 10:29         ` Dmitry A. Kazakov
2004-04-12 12:29           ` Samuel Tardieu
2004-04-13  8:46             ` Dmitry A. Kazakov
2004-04-10  1:42     ` Stephen Leake
2004-04-10 16:05       ` chris
2004-04-09 12:44   ` Dan McLeran
2004-04-09 22:44     ` Randy Brukardt
2004-04-09 14:44   ` Simon Wright
2004-04-09  1:15 ` Jeffrey Carter
2004-04-09  1:28   ` Pat Rogers
2004-04-10  1:05     ` Jeffrey Carter
2004-04-09 12:57   ` Dan McLeran
2004-04-10  1:16     ` Jeffrey Carter
2004-04-09  4:03 ` Steve
2004-04-09 14:50   ` Simon Wright
2004-04-09 17:12     ` Pat Rogers
2004-04-09 19:33       ` Vinzent 'Gadget' Hoefler
2004-04-10  6:33         ` Simon Wright
2004-04-13 10:26           ` Vinzent 'Gadget' Hoefler
2004-04-14 17:27             ` Simon Wright
2004-04-15  9:43               ` Vinzent 'Gadget' Hoefler
2004-04-17  7:59                 ` Simon Wright
2004-04-11 12:45   ` Florian Weimer
replies disabled

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