From: ok@goanna.cs.rmit.EDU.AU (Richard A. O'Keefe)
Subject: Re: next "big" language?? (disagree)
Date: 1996/06/12
Date: 1996-06-12T00:00:00+00:00 [thread overview]
Message-ID: <4plegb$ibp@goanna.cs.rmit.EDU.AU> (raw)
In-Reply-To: 4pj8p7$h9r@goanna.cs.rmit.EDU.AU
> ok@goanna.cs.rmit.edu.au (Richard A. O'Keefe) writes:
> > subtype Assertion is Boolean range True .. True;
> > ...
> > X_Is_Even: Assertion := X mod 2 = 0;
> >This will raise a constraint exception if the assertion is false.
> >Looks like an assertion to me.
I am seeing this in comp.lang.ada, where, to preserve what tattered shreds
of credibility I may perhaps retain, I should point out that this was a
flip response I posted to an attack in comp.lang.misc. The last thing I
wanted to do was to admit that an Ada compiler may optimise this away...
rav@goanna.cs.rmit.EDU.AU (++ robin) writes:
>---What is the point of this?
> A declaration buried somewhere else, and a test.
The declaration is *not* buried "somewhere else", but precisely where
it is needed. The context is something like this:
-- assume an external
-- function Assertion(Condition: Boolean) return Boolean is
-- begin
-- if not Condition then
-- raise Assertion_Violation;
-- end if;
-- return Condition;
-- end Assertion;
procedure P(X: Natural) is
Precondition: constant Boolean := Assertion(
X mod 2 = 0
);
...
> Why not something in clear english, which doesn't need a
>reference to some other part of the program, like:
> if mod(x, 2) ^= 0 then
> put ('The value of x is not odd.');
(a) That is not English.
(b) It is back to front: I was asserting that X *should* be even;
you are printing an error mesage if the value is ok!
(c) This *is* a reference to some other part of the program.
The intent is, after all, to state _all_ the properties of
an argument in one place. Why should the fact that X should be
even be ripped apart and stated miles away from the fact that
X should be a natural number?
(d) A command to write a string to SYSOUT is not the same as a
declaration that says that a particular condition should be true.
>This has the aditional benefit that the user of the program
>has a clear unequivocal message about the cause of the problem.
(e) But who says there *is* a user? In C, for example, assert()
raises the SIGABRT exception, which may (but need not) be handled
by the program itself.
(f) The message is not clear. How can you possibly expect a user to
know what 'x' means? I have been the victim of programs that
responded to error situations by producing symbolic dumps (any
other EMAS users out there?) and it was really useless; the
internal details of a program just aren't intelligible to most
of its users.
(g) The message is not about the cause. It is about a symptom.
(h) If you want a message, I can, using goanna:~ok/Ada.d/assertions.ad{s,b},
write
procedure P(X: Natural) is
Precondition: constant Boolean := Assertion(
X mod 2 = 0,
"The frotznick count must be even"
);
...
>If it's important that the whereabouts of this test be known,
>the programmer can include a statement such as "signal error;"
>or "signal condition (xyz);" or "put (' at line ', sourceline );"
>along with the put statement. [PL/I example]
The one thing that I cannot mimic in my Assertions package is C's
"NDEBUG" flag. The nearest that one could get to it would be to
have assertions of the form
Assert(No_Debug or else (the real assertion));
Of course it _is_ possible to get this effect by using a preprocessor.
The version of m4 I use has a flag to get case-insensitive macro names,
so
define(Assert, `null')
define(Assertion, `True')
would do the trick. I have used M4 to good effect with Pascal, but have
so far held off using it with Ada.
--
Fifty years of programming language research, and we end up with C++ ???
Richard A. O'Keefe; http://www.cs.rmit.edu.au/~ok; RMIT Comp.Sci.
next prev parent reply other threads:[~1996-06-12 0:00 UTC|newest]
Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4p0fdd$4ml@news.atlantic.net>
1996-06-04 0:00 ` next "big" language?? (disagree) Peter Hermann
1996-06-04 0:00 ` The Amorphous Mass
1996-06-04 0:00 ` Peter Hermann
1996-06-04 0:00 ` The Amorphous Mass
1996-06-05 0:00 ` Michael David WINIKOFF
1996-06-07 0:00 ` Robert Dewar
1996-06-04 0:00 ` Robert Dewar
1996-06-06 0:00 ` Ken Garlington
1996-06-12 0:00 ` Help making ada pretty CSC Trusted Systems Group
1996-06-14 0:00 ` Sandy McPherson
1996-06-19 0:00 ` Ruediger Berlich
1996-06-05 0:00 ` next "big" language?? (disagree) Ian Ward
1996-06-05 0:00 ` The Amorphous Mass
1996-06-08 0:00 ` Robert Dewar
1996-06-08 0:00 ` Robert Dewar
1996-06-08 0:00 ` The Amorphous Mass
1996-06-09 0:00 ` Robert Dewar
1996-06-05 0:00 ` ++ robin
1996-06-05 0:00 ` Ian Ward
1996-06-05 0:00 ` Ian Ward
1996-06-06 0:00 ` Richard Riehle
1996-06-07 0:00 ` Robert Dewar
1996-06-10 0:00 ` Richard Riehle
1996-06-07 0:00 ` Richard Riehle
1996-06-08 0:00 ` O'Connor
1996-06-11 0:00 ` ++ robin
1996-06-11 0:00 ` James_Rogers
1996-06-11 0:00 ` Kevin J. Weise
1996-06-11 0:00 ` Chris Warack <sys mgr>
1996-06-11 0:00 ` David Weller
1996-06-11 0:00 ` ++ robin
1996-06-11 0:00 ` Ian Ward
1996-06-12 0:00 ` ++ robin
1996-06-12 0:00 ` Ian Ward
1996-06-11 0:00 ` Jon S Anthony
[not found] ` <4p60nk$imd@euas20.eua.ericsson.se>
[not found] ` <4p8lmq$oq7@goanna.cs.rmit.edu.au>
1996-06-11 0:00 ` ++ robin
1996-06-11 0:00 ` A. Grant
1996-06-12 0:00 ` Robert Dewar
1996-06-17 0:00 ` A. Grant
1996-06-18 0:00 ` Robert Dewar
1996-06-24 0:00 ` Robert I. Eachus
1996-06-26 0:00 ` Norman H. Cohen
1996-06-19 0:00 ` Jon S Anthony
1996-06-20 0:00 ` Robert Dewar
1996-06-24 0:00 ` Adam Beneschan
1996-06-24 0:00 ` Dale Stanbrough
1996-06-24 0:00 ` hopkinc
1996-06-24 0:00 ` Lars Duening
1996-06-24 0:00 ` Assertions (was: Re: next "big" language?? (disagree)) Robert A Duff
1996-06-24 0:00 ` Assertions (a different intent?) Gary McKee
1996-06-24 0:00 ` Assertions (was: Re: next "big" language?? (disagree)) Robert Dewar
1996-06-25 0:00 ` Robert A Duff
1996-06-28 0:00 ` Robert Dewar
[not found] ` <4qrljg$15l8@watnews1.watson.ibm.com>
1996-06-28 0:00 ` Robert Dewar
1996-06-24 0:00 ` next "big" language?? (disagree) Adam Beneschan
1996-06-24 0:00 ` Robert Dewar
1996-06-26 0:00 ` Marc C. Brooks
1996-06-26 0:00 ` Marc C. Brooks
[not found] ` <4qsbm7$r1s@Starbase.NeoSoft.COM>
1996-06-28 0:00 ` "Assert"? "Assume"? (was: next "big" language?? (disagree)) Alexander Bunkenburg
1996-06-28 0:00 ` Ian Collier
1996-07-01 0:00 ` Cameron Laird
1996-06-24 0:00 ` next "big" language?? (disagree) Keith Thompson
1996-06-25 0:00 ` Robert A Duff
1996-06-25 0:00 ` Simon Read
1996-06-25 0:00 ` Brian Nettleton @pulsar
1996-06-26 0:00 ` Robert Dewar
1996-06-28 0:00 ` Fergus Henderson
1996-06-28 0:00 ` Robert Dewar
1996-06-30 0:00 ` Fergus Henderson
1996-06-30 0:00 ` Robert Dewar
1996-06-25 0:00 ` Darin Johnson
1996-06-26 0:00 ` Dale Stanbrough
1996-06-26 0:00 ` A. Grant
1996-06-12 0:00 ` ++ robin
1996-06-12 0:00 ` A. Grant
1996-06-14 0:00 ` Richard A. O'Keefe
1996-06-12 0:00 ` Richard A. O'Keefe [this message]
1996-06-12 0:00 ` ++ robin
1996-06-12 0:00 ` Richard A. O'Keefe
1996-06-13 0:00 ` ++ robin
1996-06-13 0:00 ` ++ robin
1996-06-12 0:00 ` Jon S Anthony
1996-06-14 0:00 ` Jon S Anthony
1996-06-15 0:00 ` Jon S Anthony
1996-06-18 0:00 ` Adam Beneschan
1996-06-18 0:00 ` Jon S Anthony
1996-06-28 0:00 ` Assertions (an heretic view) Michel Gauthier
1996-06-28 0:00 ` Robert Dewar
1996-06-28 0:00 ` Robert A Duff
1996-06-06 0:00 ` next "big" language?? (disagree) Dale Pontius
1996-06-11 0:00 ` Jon S Anthony
1996-06-12 0:00 ` Help making ada pretty Pedro de las Heras
1996-06-18 0:00 ` next "big" language?? (disagree) ++ robin
1996-06-07 0:00 Ian Ward
1996-06-08 0:00 ` O'Connor
1996-06-10 0:00 ` Matt Kennel
1996-06-11 0:00 ` Ian Ward
1996-06-12 0:00 ` Norman H. Cohen
1996-06-11 0:00 ` Robb Nebbe
1996-06-09 0:00 ` Robert Dewar
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox