comp.lang.ada
 help / color / mirror / Atom feed
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.


  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