From: Martin Krischik <krischik@users.sourceforge.net>
Subject: Re: and then... (a curiosity)
Date: Tue, 02 Sep 2008 10:57:39 +0200
Date: 2008-09-02T10:57:39+02:00 [thread overview]
Message-ID: <48bd0003$1@news.post.ch> (raw)
In-Reply-To: <Pine.LNX.4.64.0809020925030.9968@medsec1.medien.uni-weimar.de>
stefan-lucks@see-the.signature schrieb:
> True. But the case that you want both expressions to be evaluated is a
> rare exception. On a *logic* level, "A and B" implies "if A is false, the
> result is false, regardless of B". So short-circuit evaluation is a
> natural and good thing for a programming language, and it is regrettable
> that Ada needs a more complex syntax for this.
That's not what I learned in my boolean arithmetic classes.
> (Well, "A and B" also
> implies "if B is false, don't care about A", but in a programming language
> you can't have it both ways.)
That is what I learned in my boolean arithmetic classes. It's either
way. There is no preference that the left parameter if more important
then the right. A Human seeing "A∧0" won't evaluate A. And if you see
"f(x)∧g" you would probably evaluate g first as a variable is usually
easier to evaluate then a function.
And it is what you have in Ada - with plain old "and" and "or" the
optimizer is free to do out of order evaluation and dead code
elimination which could well lead to B being evaluated first and A being
optimized away if B already determines the final result.
This - of course - only if the compiler can also determine that A and B
have no side effect. Side effect are that little difference between
arithmetic and programming. The CONSTRAINT_ERROR in:
if X /= null and x.all = 5 then
Do_Something;
end if;
or the global variable which f(x) might change:
function f(x:Integer) is
begin
if x > 10 then
g = false;
end if;
return x > 5;
end f;
It's all about those side effect which make order of evaluation so
important. Otherwise it should not matter.
Note that once you add:
pragma Inline (f);
to the example above things become very interesting for the optimizer
;-) (do remember that the optimizer will use goto without shame).
> But, as others pointed it: IF the default "and" supported
> short-circuit-evaluation, THEN this "and" could not be an ordinary Ada
> operator. At the language semantic level, it is much more reasonable to
> treat "and" like any other operator or function, such as "+" and "-".
Well again, in my arithmetic classes I learned that a+b is the same and
b+a - which includes that the order of evaluation is of no importance.
If you want that ∧ operates the same way as + then "a∧b" must be the
same as "b∧a".
Martin
--
mailto://krischik@users.sourceforge.net
Ada programming at: http://ada.krischik.com
next prev parent reply other threads:[~2008-09-02 8:57 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-29 21:06 and then... (a curiosity) mockturtle
2008-08-29 21:47 ` Samuel Tardieu
2008-08-30 21:28 ` Maciej Sobczak
2008-08-31 8:28 ` Georg Bauhaus
2008-08-31 23:21 ` Ray Blaak
2008-09-01 8:05 ` Martin Krischik
2008-09-01 17:56 ` Ray Blaak
2008-09-02 6:53 ` Martin Krischik
2008-09-02 14:56 ` Adam Beneschan
2008-09-02 16:28 ` Ray Blaak
2008-09-02 16:26 ` Ray Blaak
2008-09-02 20:50 ` Robert A Duff
2008-09-03 12:35 ` Brian Drummond
2008-09-03 15:56 ` Robert A Duff
2008-09-04 22:09 ` Brian Drummond
2008-09-03 21:01 ` Vinzent Hoefler
2008-09-02 14:50 ` Adam Beneschan
2008-08-29 22:28 ` Adam Beneschan
2008-08-30 1:06 ` Jeffrey R. Carter
2008-08-30 11:21 ` Dmitry A. Kazakov
2008-08-30 15:35 ` Peter C. Chapin
2008-09-02 15:06 ` Adam Beneschan
2008-09-02 3:41 ` Steve
2008-09-02 7:48 ` stefan-lucks
2008-09-02 8:57 ` Martin Krischik [this message]
2008-09-02 10:50 ` stefan-lucks
2008-09-02 10:33 ` Ludovic Brenta
2008-09-02 13:32 ` stefan-lucks
2008-09-02 12:53 ` Ludovic Brenta
2008-09-02 17:32 ` Georg Bauhaus
2008-09-03 13:14 ` stefan-lucks
2008-09-03 12:44 ` Dmitry A. Kazakov
2008-09-02 13:39 ` stefan-lucks
2008-09-02 13:40 ` stefan-lucks
2008-09-02 16:48 ` Dmitry A. Kazakov
2008-09-02 17:00 ` Keith Thompson
2008-09-02 19:15 ` Simon Wright
2008-09-02 20:37 ` Robert A Duff
2008-09-02 20:58 ` Jeffrey R. Carter
2008-09-02 21:08 ` Robert A Duff
2008-09-03 12:24 ` Pascal Obry
2008-09-02 22:34 ` Santiago Urueña
2008-09-03 5:56 ` Robert A Duff
2008-09-03 6:55 ` Santiago Urueña
2008-09-03 14:14 ` Adam Beneschan
2008-09-03 0:11 ` Randy Brukardt
2008-09-02 17:20 ` Georg Bauhaus
2008-09-04 1:05 ` Stephen Leake
2008-09-04 6:45 ` stefan-lucks
2008-09-04 7:35 ` Dmitry A. Kazakov
2008-09-04 12:04 ` stefan-lucks
2008-09-04 13:00 ` Dmitry A. Kazakov
2008-09-04 19:05 ` stefan-lucks
2008-09-04 20:28 ` Dmitry A. Kazakov
2008-09-05 6:57 ` stefan-lucks
2008-09-05 6:34 ` Ray Blaak
2008-09-05 14:14 ` Robert A Duff
2008-09-05 15:04 ` Dmitry A. Kazakov
2008-09-07 16:45 ` stefan-lucks
2008-09-05 15:14 ` Hyman Rosen
2008-09-05 15:59 ` Adam Beneschan
2008-09-05 16:10 ` Hyman Rosen
2008-09-07 16:36 ` stefan-lucks
2008-09-07 16:08 ` Gautier
2008-09-04 7:39 ` Karel Th�nissen
2008-09-04 12:12 ` stefan-lucks
2008-09-04 15:13 ` Georg Bauhaus
2008-09-04 15:16 ` Karel Th�nissen
2008-09-04 15:42 ` Dmitry A. Kazakov
2008-09-04 19:27 ` stefan-lucks
2008-09-04 19:43 ` stefan-lucks
2008-09-04 19:40 ` Georg Bauhaus
2008-09-05 7:00 ` stefan-lucks
2008-09-05 6:35 ` Ray Blaak
2008-09-04 20:06 ` Karel Th�nissen
2008-09-05 7:44 ` stefan-lucks
2008-09-05 6:41 ` Vinzent Hoefler
2008-09-04 20:09 ` Karel Th�nissen
2008-09-05 7:25 ` stefan-lucks
2008-09-05 6:37 ` Ray Blaak
2008-09-05 8:20 ` stefan-lucks
2008-09-05 13:57 ` Robert A Duff
2008-09-04 16:33 ` Dmitry A. Kazakov
2008-09-04 19:31 ` stefan-lucks
2008-09-04 19:59 ` Karel Th�nissen
2008-09-05 7:27 ` stefan-lucks
2008-09-05 8:38 ` Ludovic Brenta
2008-09-04 20:17 ` Dmitry A. Kazakov
2008-09-05 13:26 ` Robert A Duff
2008-09-05 13:49 ` Robert A Duff
2008-09-03 1:24 ` Stephen Leake
2008-09-03 3:31 ` tmoran
2008-09-03 13:22 ` stefan-lucks
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox