comp.lang.ada
 help / color / mirror / Atom feed
From: sampson@cod.nosc.mil  (Charles H. Sampson)
Subject: Re: and then
Date: 10 Apr 93 01:03:55 GMT	[thread overview]
Message-ID: <1993Apr10.010355.4244@nosc.mil> (raw)

In article <1993Apr9.180808.19494@scf.loral.com> bashford@srs.loral.com (Dave B
ashford) writes:
>In article <1q29bd$7d8@huon.itd.adelaide.edu.au> andrewd@cs.adelaide.edu.au wr
ites:
>>There could well be cases where evaluation of both operands is wanted
>>(if evaluation of one or both has a desired side-effect). If so,
>>"optimising" evaluation of one away is highly undesirable.
>
>I can't believe my eyes - "desired side-effect" in Ada ? Several people
>have mentioned side-effects as a reason not to optimize boolean
>expressions.  I thought one of the guiding principles of good s/w
>engineering was to minimize or eliminate side-effects. The only reason
>I can think of not to optimize to short circuit forms is to catch
>undesired side-effects.
>
> ...
>
>Are there "desired side-effects" ?

     I assume you're referring to side effects of function references. 
Procedures almost always have desirable side effects.

     In the original requirements for Ada (Steelman), functions were not
allowed to have side effects.  At least one of the candidate languages,
Blue if I remember correctly, took a stab at prohibiting them with rules
about exactly what kind of code a function could and could not contain. 
Somewhere along the way the requirement vanished, either by explicit action
or benign neglect, probably because the requirement was considered draconi-
an.  By that time I was pretty far out of the loop.

     Back to the question.  In my programming style, a function is a sub-
program whose _primary_ purpose is the calculation of a single value and a
procedure is a subprogram whose _primary_ purpose is performing an action.
(There's an unfortunate grey area in applying these rules.)  This allows
for functions that have side effects and procedures that have only one
formal parameter, of mode OUT.  I tend to minimize the side effects of
functions, but I don't rule them out.

     For example, in processing a character stream, I prefer to have a
function named Next_character that returns the next character from the
stream and moves the stream cursor so that character becomes the previous
character, rather than a procedure named Get.

                                   Charlie

             reply	other threads:[~1993-04-10  1:03 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1993-04-10  1:03 Charles H. Sampson [this message]
  -- strict thread matches above, loose matches on Subject: below --
1993-04-12 18:38 and then Charles H. Sampson
1993-04-12 13:29 cis.ohio-state.edu!zaphod.mps.ohio-state.edu!howland.reston.ans.net!noc.n
1993-04-11  3:55 Michael Feldman
1993-04-10 19:52 Alex Blakemore
1993-04-10 15:43 Dik T. Winter
1993-04-10 15:36 Dik T. Winter
1993-04-10  9:39 munnari.oz.au!yoyo.aarnet.edu.au!news.adelaide.edu.au!usenet
1993-04-09 18:08 Dave Bashford
1993-04-09 14:06 Dan Rittersdorf
1993-04-08 22:35 Andrew Dunstan,,2285592,
1993-04-08 22:28 Alex Blakemore
1993-04-08 19:03 Art Duncan
1993-04-08 16:18 Charles H. Sampson
1993-04-08 15:34 Christopher J. Henrich
1993-04-08 12:21 enterpoop.mit.edu!usc!cs.utexas.edu!mars.tsd.arlut.utexas.edu!gardner
1993-04-07 22:58 Mark Lundquist
1993-04-07 21:07 Ray Harwood -- Data Basix: (602)721-1988
1993-04-07 16:21 Charles H. Sampson
1993-04-07 12:42 Robert Firth
replies disabled

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