comp.lang.ada
 help / color / mirror / Atom feed
From: Jacob Sparre Andersen <sparre@nbi.dk>
Subject: Re: String filtering
Date: Mon, 03 Oct 2005 09:44:10 +0200
Date: 2005-10-03T09:44:10+02:00	[thread overview]
Message-ID: <m2y85b6o51.fsf@hugin.crs4.it> (raw)
In-Reply-To: wccirwf5rag.fsf@shell01.TheWorld.com

Robert A Duff wrote:
> Steve Whalen wrote:

>> I seem to have been brainwashed into thinking that functions with
>> side effects of any kind were a "bad thing", especially in a
>> language like Ada.
>
> I think that side effects in functions are usually a bad idea.
> But not always.

My whole understanding of the concept "a function" is that it doesn't
have side effects. - But I'm a mathematician (and physicist), not a
computer scientist.

> I think the programmer, not the language designer, should make such
> decisions.  I like restrictive rules that prevent me (as a
> programmer) from doing bad things by accident.  But I don't like
> restrictive rules that try to prevent me from doing things I
> deliberately choose to do.

The problem is then to introduce a way to make it clear if you want a
function to have side effects or not.  Just coding a function with
side effects isn't the most clear way to do it (although using an "in
out" parameter is pretty close).  Would it be to go too far to have to
specify functions as either:

   function Name (...) return Subtype;

or:

   function Name with side effects (...) Subtype;

I know that new keywords aren't exactly popular, but I hope the basic
idea still is clear.

It might be possible to do something similar with a pragma, but I
would prefer to have it more explicit in the declaration of the
function.

Introducing a clear separation of functions in those which can have
side effects and those which can't have side effects, might also allow
us to tighten the current, somewhat lax definition of functions
without side effects.

> We can solve this in Ada by adding various levels of indirection,
> which is rather a pain.  For example, the "Rosen trick".

Would it be possible to tighten the rules for functions without side
effects to prevent the "Rosen trick"?  Or will that workaround
effectively always be possible?

> Another example of side effects that I think are OK is when you're
> getting items from a stream.

Agreed.  But I wouldn't mind being forced to document that the
function had side effects.

> Both 'out' and 'in out' should be allowed.  If I ran the circus, I
> would also require some sort of syntactic indication on the _call_
> for '[in] out' parameters.  For both procedures and functions.

That might make more sense than just indicating it in the declaration.

> P.S. "Side effect" is a pejorative term.  (Some drug cures your
> disease, but makes you nauseous.)  If the effect is intended by the
> programmer, and clear in the code, perhaps we should call it an
> "effect", without the "side".

"Effect" is not quite clear enough.  "Global effect" might be to
exaggerate a bit.  "Modifying function"?

Greetings,

Jacob
-- 
"Three can keep a secret if two of them are dead."




  reply	other threads:[~2005-10-03  7:44 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-27  6:27 String filtering David Trudgett
2005-09-27  7:38 ` Jacob Sparre Andersen
2005-09-27  9:13   ` David Trudgett
2005-09-27  9:49     ` Dmitry A. Kazakov
2005-09-27 11:01       ` Martin Dowie
2005-09-27 11:12         ` Martin Dowie
2005-09-27 12:54           ` Dmitry A. Kazakov
2005-09-27 13:42             ` Martin Dowie
2005-09-27 14:24               ` Dmitry A. Kazakov
2005-09-28  0:06                 ` David Trudgett
2005-09-28  8:15                   ` Dmitry A. Kazakov
2005-09-28 10:39                     ` David Trudgett
2005-09-28 20:55                       ` Simon Wright
2005-09-28 21:53                         ` Martin Dowie
2005-09-28  9:08                   ` Jacob Sparre Andersen
2005-09-28  9:54                     ` David Trudgett
2005-09-29 14:05                       ` Georg Bauhaus
2005-10-01 19:02                         ` tmoran
2005-10-02  6:38                           ` David Trudgett
2005-10-02 14:11                             ` Martin Dowie
2005-10-02 22:40                               ` David Trudgett
2005-10-03  5:56                                 ` Martin Dowie
2005-10-03 10:33                           ` Georg Bauhaus
2005-09-28 18:21                   ` Jeffrey R. Carter
2005-09-28 21:00                   ` Simon Wright
2005-09-27 11:22         ` David Trudgett
2005-09-27 11:15       ` David Trudgett
2005-09-27 13:21         ` Dmitry A. Kazakov
2005-09-27 13:43           ` Martin Dowie
2005-09-28  0:51           ` David Trudgett
2005-09-28 12:02             ` Dmitry A. Kazakov
2005-09-28 13:25             ` Marc A. Criley
2005-09-29 22:42           ` Randy Brukardt
2005-09-30 17:54             ` Robert A Duff
2005-10-02  6:57               ` Steve Whalen
2005-10-02 14:14                 ` Martin Dowie
2005-10-03  1:21                 ` Robert A Duff
2005-10-03  7:44                   ` Jacob Sparre Andersen [this message]
2005-10-03  8:56                     ` Dmitry A. Kazakov
2005-10-03  9:25                       ` Jean-Pierre Rosen
2005-10-03 20:17                         ` Ada Notation Jeffrey R. Carter
2005-10-03 20:41                           ` Georg Bauhaus
2005-10-05 17:16                             ` Andre
2005-10-05 18:23                               ` Ludovic Brenta
2005-10-05 18:24                               ` Jeffrey R. Carter
2005-10-04 15:13                           ` brian.b.mcguinness
2005-10-04 17:00                     ` String filtering Robert A Duff
2005-10-05  8:19                       ` Jean-Pierre Rosen
2005-10-05 11:25                         ` Robert A Duff
2005-10-04 19:47                     ` Björn Persson
2005-10-05 14:14                       ` Dmitry A. Kazakov
2005-10-03 10:06                   ` Steve Whalen
2005-10-03 17:43                   ` tmoran
2005-10-03 17:59                     ` Robert A Duff
2005-10-05 23:04                       ` Randy Brukardt
2005-09-27 13:52         ` Jacob Sparre Andersen
2005-09-28  1:01           ` David Trudgett
2005-09-28  1:50             ` David Trudgett
2005-09-27 14:08         ` Georg Bauhaus
2005-09-27 14:09         ` Marc A. Criley
2005-09-28  1:09           ` David Trudgett
2005-09-28 21:09           ` Simon Wright
2005-09-27 17:59         ` tmoran
2005-09-28  1:20           ` David Trudgett
2005-09-27 17:47     ` Jeffrey R. Carter
2005-09-28  1:29       ` David Trudgett
2005-09-28 18:32         ` Jeffrey R. Carter
2005-09-27  7:41 ` tmoran
2005-09-27  9:17   ` David Trudgett
2005-09-28  1:54 ` Steve
2005-09-28  2:20   ` David Trudgett
replies disabled

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