comp.lang.ada
 help / color / mirror / Atom feed
From: Tucker Taft <stt@averstar.com>
Subject: Re: Problem trying to implement generics.
Date: Tue, 17 Apr 2001 09:20:32 -0400
Date: 2001-04-17T13:20:29+00:00	[thread overview]
Message-ID: <3ADC4320.7ACA3DEC@averstar.com> (raw)
In-Reply-To: wccbsq0cslt.fsf@world.std.com

Robert A Duff wrote:
> 
> "Ayende Rahien" <Dont@spam.me> writes:
> 
> > BTW, is there any reason why I can't use out parameter with a function?
> 
> Because it's not allowed.  ;-)
> 
> Hmm, are we going have this argument again?  Oh well, it's kind of fun,
> in a time-wasting sort of way.  Here goes:
> 
> If I ran the circus, functions would be allowed to have 'out' and 'in
> out' parameters.

It would be interesting to see where such functions would
typically be used.  My experience is that the most common
uses for such functions are:
   1) Returning a status value (probably better handled with
        exceptions in Ada)
   2) Using in a "while" loop, such as:
         while Get_Next(Iterator, Val) loop
             ...
         end loop;

My own objection to having functions with OUT parameters is
that it increases the possibility for confusion for the
reader.  When you see a procedure call, there is little doubt
that it is being called for its side-effects.  When you see
a function call (except in certain stylized locations such
as the "while" condition above), you presume it is being
called for its value, or at least it won't directly change
the value of some elementary parameter passed to it.

I wonder if we might create a new loop syntax to accommodate
the "while" case above, without opening up the function-with-
out-parameters box.

Alternatively, just get used to one of the idioms:

    loop
        Get_Next(Iterator, Val, Done);
      exit when Done;
        ...
    end loop;

or
    while More(Iterator) loop
        Get_Next(Iterator, Val);
        ...
    end loop;

Interestingly enough, the standard Iterator in Java
uses:
     while (Iter.hasNext()) {
         X = Iter.next();
         ...
     }

even though Java has functions with side effects (although
in fact, only with side-effects on by-reference operands,
since it has no parameter modes at all!).

-Tuck

> 
> - Bob
> 
> P.S. One workaround is to use access parameters.

Note, that "C" uses essentially the same "workaround" since
C has no "out" parameters.

-- 
-Tucker Taft   stt@avercom.net   http://www.averstar.com/~stt/
Chief Technology Officer, AverCom Corporation (A Titan Company) 
Burlington, MA  USA (AverCom was formerly the Commercial Division of AverStar:
http://www.averstar.com/services/ebusiness_applications.html)



  parent reply	other threads:[~2001-04-17 13:20 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-04-11 15:04 Problem trying to implement generics Ayende Rahien
2001-04-12  1:41 ` tmoran
2001-04-12 13:15   ` Ayende Rahien
2001-04-12 18:15     ` tmoran
2001-04-13 11:18       ` Ayende Rahien
2001-04-13 10:35         ` chris.danx
2001-04-13 11:54           ` Ayende Rahien
2001-04-13 11:49             ` chris.danx
2001-04-13 23:03               ` Ayende Rahien
2001-04-13 23:01                 ` Robert A Duff
2001-04-14  0:05                   ` Brian Rogoff
2001-04-14  1:12                     ` Ayende Rahien
2001-04-14  1:44                       ` Brian Rogoff
2001-04-14 14:03                         ` Dmitry A. Kazakov
2001-04-14 16:30                           ` Ayende Rahien
2001-04-14 16:28                             ` Michael Erdmann
2001-04-15  3:27                             ` James Rogers
2001-04-15 12:20                               ` Ayende Rahien
2001-04-15 14:09                               ` Dmitry A. Kazakov
2001-04-15 18:22                                 ` tmoran
2001-04-15 13:48                             ` Dmitry A. Kazakov
2001-04-15 20:44                               ` Ayende Rahien
2001-04-16 14:34                                 ` Dmitry A. Kazakov
2001-04-14  1:33                     ` Robert A Duff
2001-04-17  8:50                     ` Jean-Pierre Rosen
2001-04-17 13:20                   ` Tucker Taft [this message]
2001-04-17 16:51                     ` Ayende Rahien
2001-04-17 17:16                       ` Larry Hazel
2001-04-17 18:11                         ` Brian Rogoff
2001-04-17 19:10                           ` Marin David Condic
2001-04-17 21:08                             ` Brian Rogoff
2001-04-18 15:16                               ` Chad R. Meiners
2001-04-18 16:33                                 ` Marin David Condic
2001-04-17 21:09                             ` chris.danx
2001-04-17 21:11                             ` chris.danx
2001-04-17 21:17                             ` chris.danx
2001-05-08  5:40                             ` Lao Xiao Hai
2001-05-11  9:43                               ` John English
2001-05-12 19:16                                 ` Lao Xiao Hai
2001-04-17 19:32                           ` Larry Hazel
2001-04-17 21:03                           ` Ayende Rahien
2001-04-18 15:48                             ` Brian Rogoff
2001-04-20 12:34                               ` Georg Bauhaus
2001-04-20 12:42                                 ` Lutz Donnerhacke
2001-04-20 12:45                                 ` Lutz Donnerhacke
2001-04-20 19:48                                 ` Brian Rogoff
2001-04-20 20:36                                   ` David Starner
2001-04-20 23:02                                   ` Robert A Duff
2001-04-23  2:45                                     ` Brian Rogoff
2001-04-24  1:15                                       ` Robert A Duff
2001-04-24  2:00                                         ` Brian Rogoff
2001-04-24 15:12                                           ` Georg Bauhaus
2001-04-24 15:09                                         ` Georg Bauhaus
2001-04-24 18:36                                           ` Marius Amado Alves
2001-04-19 13:08                           ` Larry Kilgallen
     [not found]                           ` <9bi4g4$97m$1@nh.pace.Organization: LJK Software <YlSyXUaQmD+$@eisner.encompasserve.org>
2001-04-19 14:20                             ` Marin David Condic
2001-04-18  5:34                       ` Mike Silva
2001-04-18 16:55                       ` Ray Blaak
2001-04-24 16:00                       ` Tucker Taft
2001-04-12 13:57 ` Andy
2001-04-13  6:34   ` Simon Wright
2001-04-13 11:11   ` Ayende Rahien
2001-04-12 18:06 ` Stephen Leake
replies disabled

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