comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Ada style of passing 'in' parameters considered dangerous?
Date: Sun, 9 Feb 2003 02:11:27 GMT
Date: 2003-02-09T02:11:27+00:00	[thread overview]
Message-ID: <wccy94qursg.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 0th1a.41024$zF6.2804045@bgtnsc04-news.ops.worldnet.att.net

"James S. Rogers" <jimmaureenrogers@worldnet.att.net> writes:

> Not at all.
> 
> In Ada an IN parameter is treated as a constant within the subprogram
> it is passed to. This eliminates the ability to shoot yourself in the foot
> with an IN parameter.

Unless the actual parameter is aliased with some global, or some other
parameter (of mode 'in out' or 'out').

>... An OUT or IN OUT parameter can be passed
> by value or by reference. The language provides no rules about this.
> The difference between the two in Ada is that an OUT parameter
> has no reliable initial value, while an IN OUT parameter does.
> In fact compiler writers are quite reasonable about their chosen
> passing mechanisms. In general, any value larger than a register
> is passed by reference. All other values may be passed by copy
> or by reference.

The rule is that elementary types are passed by copy (including copy-out
in the 'in out' or 'out' case).  Arrays and records leave the compiler a
choice (except in the case of limited types).  And that choice can make
a difference in the behavior of the program, unfortunately.

> There can be no race condition for either situation in a normal
> subprogram, since the called subprogram will execute in the
> same task as the calling subprogram.

The issue arises without any multi-tasking.  But in the multi-task case,
it's even worse: an integer is passed by copy (thus no other task can
meddle with the actual), but a record containing a single integer might
be passed either way.

> Calling a task entry may involve passing data. This is a form
> of communication between tasks. In Ada this happens as part
> of a "rendezvous", where the two tasks synchronize at the point
> of communication, again eliminating a race condition.
> 
> Calling a protected operation is another option for inter-task
> communication. Again, protected operations execute within
> the calling task, or its proxy in the case of protected entries.
> 
> I have never seen a case where Ada parameter modes have
> shot the programmer in the foot.

Would it not be better if we could say, "It is not possible to shoot
oneself in one's foot"?

>...Ada parameter passing modes
> are a lot safer to use than the rules found for Java.

Yes, in Java everything's a pointer, so any procedure can modify any of
its parameters (more or less).  Ada is better in that regard.

>... In Java all
> primitive types are passed by value and all objects are passed
> by reference. You have no choice. This does cause genuine
> problems in program design for Java, particularly when you
> want to modify the value of a primitive parameter. Since it is
> impossible to pass an object by value you have the ever present
> danger of unexpected side effects in Java method calls.
> 
> Java does not have a direct equivalent of the Ada rendezvous,
> nor does it provide an equivalent of Ada protected operations.
> Java produces concurrency with a lot more surprises.
> 
> Jim Rogers

- Bob



  reply	other threads:[~2003-02-09  2:11 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-02-08 22:24 Ada style of passing 'in' parameters considered dangerous? Antti Sykari
2003-02-09  0:41 ` James S. Rogers
2003-02-09  2:11   ` Robert A Duff [this message]
2003-02-09  2:25   ` Jeffrey Carter
2003-02-11  8:39   ` Gautier
2003-02-09  2:01 ` Robert A Duff
2003-02-09  2:33   ` Vinzent Hoefler
2003-02-09  6:07   ` Richard Riehle
2003-02-09  7:13   ` Robert I. Eachus
2003-02-10  4:40     ` Martin Dowie
2003-02-09  2:08 ` Jeffrey Carter
2003-02-10  0:13 ` Leif Holmgren
2003-02-10  9:49 ` Rod Chapman
2003-02-11  9:14 ` Gautier
2003-02-11 13:49   ` Antti Sykari
2003-02-11 17:18   ` Gautier
2003-02-11 17:29     ` Vinzent Hoefler
2003-02-12  1:09   ` Richard Riehle
replies disabled

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