comp.lang.ada
 help / color / mirror / Atom feed
From: dan.r.mcleran@seagate.com (Dan McLeran)
Subject: Re: Pass by reference
Date: 9 Apr 2004 05:53:39 -0700
Date: 2004-04-09T05:53:39-07:00	[thread overview]
Message-ID: <19b0e504.0404090453.3c276b@posting.google.com> (raw)
In-Reply-To: 54077117.Uc4Ikxz6le@linux1.krischik.com

> Good Ada compiler will do what is best. So "array (1 .. 2) of Character" is
> likely to be passed by value while "array (1 .. 10_000) of Integer" is
> probably passed by reference. And some Ada compilers might even use pass by
> register.

Not sure what you mean by 'pass by register'. Maybe each value of a
2-element array are loaded into registers and then read by the calling
function?

> 
> This might sound strange to a C, C++ or C# programmer. Like giving up
> control. There are things humans can do better then computers but there are
> also things computers can do better then humans - and counting is is among
> those. The compiler knows much better how many registers are available, how
> large the type is, how long it takes to copy and so on.

It's not too foreign of idea to me because I use a C++ library to do
essentially the same thing. The Boost Call Traits Library is a
template library that chooses the optimal parameter passing convention
based on type. Since the C++ project I have been working on makes
heavy use of templates, I am used to leaving it up to
someone/something else to choose the best calling convention.

> 
> You say what you need (in, out, in out) and the compiler will choose the
> optimal way to fullfill you which. 

This is what I want to solidify in my brain. Alot of people posting
replies seem to say that the compiler has more freedom than the RM
specifies. If most Ada compilers are conforming, I would assume that
the compiler only has freedom for unspecified types. By-reference and
by-values types must be passed as stated in RM 6.2.

> 
> > 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.
> 
> They are in deed allways passed by reference. That's done to enable
> dispaching. Rermember: all native procedures of a tagged type are "virtual".
> 
> Two ways around that behavior:
> 
> 1st: for any tagged type X there is indefinite type X'Class. X'Class is an
> indefinite but untagged type so RM 6.2 does not apply here. 
> 
> 2nt: RM 6.2 does not apply to a non native procedure. That is a procedure 
> in another package.
> 
> With Regards
> 
> Martin



  reply	other threads:[~2004-04-09 12:53 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 [this message]
2004-04-13 12:42     ` Martin Krischik
2004-04-08 19:04 ` Jim Rogers
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