From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,9f3d09bde7b33b5d X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2004-04-09 05:44:40 PST Path: archiver1.google.com!postnews1.google.com!not-for-mail From: dan.r.mcleran@seagate.com (Dan McLeran) Newsgroups: comp.lang.ada Subject: Re: Pass by reference Date: 9 Apr 2004 05:44:39 -0700 Organization: http://groups.google.com Message-ID: <19b0e504.0404090444.376ab672@posting.google.com> References: <19b0e504.0404080652.4eab9f80@posting.google.com> NNTP-Posting-Host: 192.55.20.36 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Trace: posting.google.com 1081514679 7520 127.0.0.1 (9 Apr 2004 12:44:39 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Fri, 9 Apr 2004 12:44:39 +0000 (UTC) Xref: archiver1.google.com comp.lang.ada:6898 Date: 2004-04-09T05:44:39-07:00 List-Id: > > > I am investigating using Ada for a project at work > > Excellent choice :). > > > 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. > > A 'by-reference type' is simply one that is always passed by > reference, never by copy. That's what I thought. > > > 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? > > The compiler is always free to choose either copy or reference for > passing parameters. This statement seems to contradict the RM and what you've said above. The way I read the RM, a by-reference type is passed by reference. No choice. A by-value type is passed by value. Again, no choice. The RM seems to indicate that the only time a compiler is free to choose is for the 'unspecified' types. > > I'm not clear what you mean by "unspecified type". Hmm, perhaps you > are refering to 6.2(11): > > For parameters of other types, it is unspecified whether the > parameter is passed by copy or by reference. Exactly. > > Yes, an array of elementary types is an "other type" in this sense; it > may be passed either by reference or copy. The compiler will choose > whichever mechanism it feels is "best". That's what I assumed when reading the RM. I'll play around with small arrays and see if the compiler decides by-value is better. > > > 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. > > Yes. > > > If so, does this mean that there is no way to pass a tagged type by > > value? > > Yes. > > > I believe C# works this way without programmer intervention. > > Don't know. > A couple of larger questions; > > Why do you care whether a type is passed by copy or reference? > > If you are worried about time or space efficiency, specify the > appropriate option to the compiler, and forget about it, until > measurements of your final application show a problem. > > Why would you want to pass a tagged type by copy? > > You might want to read the Ada Rationale, and the annotated Ada > Reference manual, on this topic. See > http://www.adaic.com/standards/ada95.html