comp.lang.ada
 help / color / mirror / Atom feed
From: firth@sei.cmu.edu (Robert Firth)
Subject: Re: Ada functions versus arrays (i.e. () vs [] )
Date: 1 Mar 90 13:11:06 GMT	[thread overview]
Message-ID: <6281@bd.sei.cmu.edu> (raw)
In-Reply-To: 608@software.software.org

In article <608@software.software.org> blakemor@software.org (Alex Blakemore) writes:

>I agree that side effects are best avoided - they definitely mess up this
>scheme.  I assume the language designers left them in for the 
>very few times when they are justifiable (e.g. next_random_number).
>Quite possibly a language design error forced on them by C programmers :-)

As I recall, we left them in for the same reason Algol-60 did: it is
impossible to rule out the bad uses without also ruling out the good
ones.  It is the responsibility of the programmer not to employ the
bad uses.

Let me give you a couple of examples that fall within the present
discussion.  You have to implement a mapping of some kind - call
it M.  The user then writes M(I) to apply the mapping to object I
in the domain of M.

Initially, this domain is small and compact, so you implement M
as an array.  During subsequent maintenance, it becomes rather
large, so you implement M as a virtual array, ie an array that is
held on backing store.  M is now a function that - shock! horror!
keeps an internal buffer cache and does some hairy I/O periodically.

This is a side effect that any rule would prohibit.  But it is a
good one: M appears to the user as a pure function; its implementation
is of no consequence and should not be visible to the invoker.  To
force M to be rewritten as a procedure pollutes the use context with
information about the implementation.

As a second example, consider a dictionary used by a spelling checker.
There is a function Check(W) that checks whether W is in the dictionary.
Many implementations of this function are adaptive: they use a temporary
cache of some kind that is dynamically reorganised so that words
occurring frequently in the document in question float to the front.
Over a long document, this can substantially speed the checking process.
Again, this is a benign and proper use of side effects within a function.

Robert Firth

  reply	other threads:[~1990-03-01 13:11 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1990-02-20 16:13 Reasons for dropping Ada Ted Holden
1990-02-20 21:04 ` Richard S D'Ippolito
1990-02-20 23:03   ` Reasons for keeping Ada David Kassover
1990-02-21  0:40     ` Clement Pellerin
1990-02-21 19:02   ` Reasons for dropping Ada Loren Louis Hart
1990-02-22 16:07     ` Mike Coffin
1990-02-22 17:01       ` if UNIX then USE_C ?? (was: Reasons for drop) Dennis M. O'Connor
1990-02-22 21:51         ` Barry Margolin
1990-02-23 19:34           ` Loren Louis Hart
1990-02-25 19:58           ` David Kassover
1990-02-26 12:45             ` John F Nixon
1990-02-26 18:28               ` David Kassover
1990-02-26 20:55                 ` John F Nixon
1990-02-26 22:00                   ` David Kassover
1990-02-27 18:55                 ` Jeremy Epstein
1990-02-28  1:19                   ` Alex Blakemore
1990-02-28 18:56                     ` Ada functions versus arrays (i.e. () vs [] ) Richard A Hammond
1990-03-01  3:25                       ` Alex Blakemore
1990-03-01 13:11                         ` Robert Firth [this message]
1990-03-02 10:56                           ` Mike Harrison
1990-03-02 23:46                           ` Scott Simpson
1990-03-02 10:42                         ` Mike Harrison
1990-03-06 19:13                       ` Erland Sommarskog
1990-03-08 14:21                         ` John Goodenough
1990-03-14 18:19                     ` if UNIX then USE_C ?? (was: Reasons for drop) RCAPENER
1990-03-01  0:29                   ` David Kassover
1990-03-01 15:11                     ` Steve Tynor
1990-03-01 18:29                       ` David Kassover
1990-03-02  0:19                 ` Robert D. Houk
1990-02-28 19:51         ` Andy DeFaria
1990-02-20 22:21 ` Reasons for dropping Ada Jeffrey M. Schweiger
replies disabled

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