From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Tests in a software release
Date: Fri, 17 Nov 2017 19:07:38 -0600
Date: 2017-11-17T19:07:38-06:00 [thread overview]
Message-ID: <ouo14q$fde$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: 12f75e44-f61b-4b59-ab82-3ae9b151f0be@googlegroups.com
"Shark8" <onewingedshark@gmail.com> wrote in message
news:12f75e44-f61b-4b59-ab82-3ae9b151f0be@googlegroups.com...
> On Thursday, November 16, 2017 at 2:44:12 PM UTC-7, G.B. wrote:
>>
>> On the contrary: you write the contract's clauses of
>> all parties to your compiler and then, once you
>> know your code meets the requirements of the contracts,
>> you drop checking code accordingly ("optimize") and in
>> good conscience.
>>
>> if X /= X or else X /= X then
>>
>> -- what, at compile time,
>> -- for which which kind of X?
>
> IEEE754's NaN would yield true in that case, so you can't simply
> optimize that away, you'd have to do some analysis of the "="/"/="
> operator.
(1) This is not an optimization, it is a Code Quality Warning. Code like the
above is either impossibly tricky or is some sort of mistake. But the
compiler doesn't change any code to something else in these cases, it
expects the programmer to fix their bug. There's no way that the compiler
can guess (in general) what mistake the programmer made.
The classic example for this sort of case mentioned in the blog is:
for I in Arr'range loop
for J in Arr'range loop
if Arr(I) = Arr(I) then -- !!
...
Here, one gets a Code Quality Warning as the condition is always True. It's
pretty obvious that the second (I) in the condition is supposed to be a (J),
but that's obvious to a human, not to a compiler.
(2) But we could make that optimization if we wanted to, a NAN is invalid.
And operations on an invalid value are implementation-defined (if
Constraint_Erorr or Program_Error is not raised). Ergo, no one can make any
assumptions about them. And a compiler can do anything it wants (including
making the optimization you suggest work).
Janus/Ada specifically makes no attempt to preserve any IEEE math (it looks
insane to me) - we only worry about meeting the Annex G requirements of Ada.
If you truly need IEEE math, you'll have to use some other Ada compiler.
(As always, some customer could show up with enough money to encourage me to
care, but that hasn't happened to date.)
(3) Janus/Ada does essentially no floating point optimizations because
pretty much anything runs afoul of accuracy problems. That means it has
terrible floating point performance (again, something that hasn't mattered
to our customers in general). I recently recompiled a float intensive
Janus/Ada program with GNAT, and the runtime of approximately 48 hours with
Janus/Ada dropped to about 30 minutes with GNAT. (Needless to say, I've
stopped using the Janus/Ada version of that program.)
Again, if we had customers for which this mattered a lot, we'd work on it,
but that hasn't been true to date and there are a lot of other things
competing for our time.
Randy.
next prev parent reply other threads:[~2017-11-18 1:07 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-25 19:30 Tests in a software release Victor Porton
2017-10-26 7:20 ` Dmitry A. Kazakov
2017-10-27 18:06 ` G. B.
2017-10-27 18:54 ` Dmitry A. Kazakov
2017-10-28 6:53 ` G.B.
2017-10-28 7:35 ` Dmitry A. Kazakov
2017-10-30 20:44 ` G. B.
2017-10-30 20:56 ` Dmitry A. Kazakov
2017-10-31 7:17 ` G.B.
2017-10-31 8:32 ` Dmitry A. Kazakov
2017-11-03 7:24 ` G.B.
2017-11-03 8:16 ` Dmitry A. Kazakov
2017-11-03 12:49 ` Shark8
2017-11-04 10:15 ` G.B.
2017-11-15 0:11 ` Randy Brukardt
2017-11-15 17:57 ` G. B.
2017-11-15 20:46 ` Dmitry A. Kazakov
2017-11-17 15:36 ` Shark8
2017-11-15 22:17 ` Randy Brukardt
2017-11-16 21:44 ` G.B.
2017-11-17 0:15 ` Randy Brukardt
2017-11-17 15:45 ` Shark8
2017-11-18 1:07 ` Randy Brukardt [this message]
2017-11-15 0:06 ` Randy Brukardt
2017-11-15 8:47 ` Dmitry A. Kazakov
2017-11-15 21:53 ` Randy Brukardt
2017-11-15 16:47 ` Jeffrey R. Carter
2017-11-15 16:59 ` J-P. Rosen
2017-11-15 20:45 ` Dmitry A. Kazakov
2017-11-15 21:58 ` Randy Brukardt
2017-11-16 5:50 ` J-P. Rosen
2017-11-16 23:53 ` Randy Brukardt
2017-11-15 0:01 ` Randy Brukardt
2017-11-16 17:02 ` Robert Eachus
2017-11-17 0:20 ` Randy Brukardt
2017-11-22 20:40 ` Robert Eachus
2017-11-14 23:55 ` Randy Brukardt
2017-10-26 8:09 ` Stefan.Lucks
2017-10-26 17:30 ` Simon Clubley
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox