comp.lang.ada
 help / color / mirror / Atom feed
From: stt@dsd.camb.inmet.com (Tucker Taft)
Subject: Re: Modulus and Remainder operations (Was Re: Help with a bit of C code)
Date: Thu, 13 Oct 1994 10:38:43 GMT
Date: 1994-10-13T10:38:43+00:00	[thread overview]
Message-ID: <CxLxKK.2o3@inmet.camb.inmet.com> (raw)
In-Reply-To: hbakerCxL95y.8L3@netcom.com

In article <hbakerCxL95y.8L3@netcom.com>,
Henry G. Baker <hbaker@netcom.com> wrote:

>In article <37er8t$oh0@watnews1.watson.ibm.com> ncohen@watson.ibm.com writes:

>>4. In Ada 9X, the parameter-passing mechanism is mandated in many cases
>>   where Ada 83 leaves it up to the implementation.   ...

>So I've been told.  But this policy is still a crock, especially for
>Ada 'limited' types, because the definer of the type has lost control
>of the type.  The 'textbook' definitions of prototypical limited types
>such as 'bank accounts' are no longer safe in the presence of such
>equivocation.

The "definer" of a limited type can decide whether to require
pass-by-reference, so they have not lost control of the type.
If you want to ensure pass-by-reference, then just declare
your limited (full) type as:

    type T is limited record
       ... -- whatever
    end T;

All objects of such a type are always passed by reference.

On the other hand, if the full type of a limited private type is in fact
nonlimited, then the definer has "lost control" over the parameter
passing, though clearly, in Ada 9X, they had the choice not to.

There are good reasons for this flexibility.  Being able to pass by copy
is essential in certain circumstances, such as extracting from a bit-packed
data structure, or in a distributed system.  The Ada rules give
flexiblity here, but as you have noted there is a price.  In Ada 9X,
the definer of a type can choose whether they want the flexibility,
or the control, by whether they make the full type nonlimited (might
be passed by copy), or limited (will be passed by reference).

>See "How to Steal from a Limited Private Account--Why Mode INOUT
>Parameters for Limited Types MUST be Passed by Reference".  Ada
>Letters XIII, 3 (May/June 1993), 91-95.  This paper is also in my ftp
>directory.

In Ada 9X, these attempts at theft can be prevented by the definer
of the type, by simply making the full type itself limited.

>      Henry Baker
>      Read ftp.netcom.com:/pub/hbaker/README for info on ftp-able papers.

S. Tucker Taft   stt@inmet.com
Ada 9X Mapping/Revision Team
Intermetrics, Inc.
Cambridge, MA  02138



  parent reply	other threads:[~1994-10-13 10:38 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1994-09-27 14:40 Modulus and Remainder operations (Was Re: Help with a bit of C code) David A. Cobb
1994-09-28 13:56 ` Robert Dewar
1994-09-29  9:04   ` Christopher Costello
1994-09-29 14:34   ` Norman H. Cohen
     [not found]   ` <1994Oct7.225248.6208@nosc.mil>
     [not found]     ` <1994Oct10.084630.19894@sei.cmu.edu>
     [not found]       ` <37bof4$ljl@gnat.cs.nyu.edu>
     [not found]         ` <37cigq$6e0@felix.seas.gwu.edu>
1994-10-11 14:42           ` Norman H. Cohen
     [not found]     ` <hbakerCxFK2p.4wp@netcom.com>
     [not found]       ` <1994Oct11.161048.1058@nosc.mil>
1994-10-11 20:06         ` Norman H. Cohen
1994-10-13  1:51           ` Henry G. Baker
1994-10-13  8:27             ` Magnus Kempe
1994-10-13 12:30               ` Robert Dewar
1994-10-14 15:45               ` Henry G. Baker
1994-10-14 22:11                 ` Robert Dewar
1994-10-15 17:35                 ` Tucker Taft
1994-10-13 10:38             ` Tucker Taft [this message]
1994-10-13 21:34             ` Norman H. Cohen
1994-10-14 15:39               ` Henry G. Baker
1994-10-14 22:56                 ` David Weller
1994-10-16  1:25                   ` Henry G. Baker
1994-10-13 18:13           ` Charles H. Sampson
1994-10-13 16:56             ` Robert I. Eachus
1994-10-13 20:59             ` Robert Dewar
1994-10-13 23:44             ` Bob Duff
replies disabled

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