comp.lang.ada
 help / color / mirror / Atom feed
From: "Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca>
Subject: Re: Boeing and Dreamliner
Date: Fri, 04 Jul 2003 12:42:04 -0400
Date: 2003-07-04T12:42:04-04:00	[thread overview]
Message-ID: <y7iNa.9124$bD1.862767@news20.bellglobal.com> (raw)
In-Reply-To: <a7q8gvokhis1hf0jllttkni7o2a4ua8nrq@4ax.com>

Dave Thompson wrote:
> On Mon, 30 Jun 2003 11:55:00 -0400, "Warren W. Gay VE3WWG"
> <ve3wwg@cogeco.ca> wrote:
> [snip]
> 
>>I would disagree with your position on the basis that even where code
>>is carefully scrutinized, within Ada you have the advantage of builtin
>>language features to check areas that you might neglect (while developing
>>and testing at least, prior to checks being turned off).
>>
>>For example, where a short (16 bit integer) in C/C++ might hold the
>>value -32768, and be negated and assigned to a short result, this
>>operation might be undefined (I am not sure if any newer standard like
>>C99 addresses this). On some implementations at least, that result is
>>silently set to 0, which clearly is incorrect! In Ada, this cannot be
>>ignored without deliberately working around it (or turning the checks
>>off).
> 
> In C and C++ short is _at least_ 16 bits, but may be more, and
> negation (prefix '-') is done after (at least virtually) applying the
> integral promotions, which includes short to int.
> 
> If int is also 16bit 2sC capable of representing -32768 but not 
> +32768, which is legal but increasingly rare, then the negation 
> is overflow and undefined behavior, which may theoretically do
> anything, and in particular no check or diagnostic required.
> This is the same in C89, C99, and C++98.  In practice it is 
> expected that if the platform has a negate (or subtract) 
> instruction or function that works correctly for nonoverflow 
> cases, the C compiler will just use it and accept whatever 
> it does for overflow, which is typically either a wrong value, 
> almost always a wrapped value, or some trap or signal.
> 
> If short is 16bit but int is larger (e.g. 32bit) then the (promotion
> and) negation is well-defined, and the narrowing assignment to short 
> produces an implementation-defined result in C89 or C++98, 
> and either an implementation-defined result or an implementation-
> defined signal in C99; implementation-defined means it must be 
> documented.  Still no check or diagnostic is required, unless the 
> implementor chooses to doument such, but it is required that 
> you either get some value or in C99 only some definite signal 
> which (presumably?) can be caught by a signal() routine although not
> necessarily recovered/resumed; you may not get arbitrary weirdness or
> crash.  FWTW.
> 
> These cases can be distinguished, if necessary, at or before compile
> time by checking the values in <limits.h>.
> 
> - David.Thompson1 at worldnet.att.net

So what this says, in the end, is that it is up to the programmer
to make these "checks" and to "do the right thing".

This is clearly one specific area that Ada has a
advantage in safety. Unless you run/test your code
with the checks deliberately turned off, you will discover this
little gem immediately (assuming that you encounter the right
data, that is). Conversely, in C/C++, this "undefined
behavior" may go completely unnoticed, until it has a disasterous
side effect somewhere else down the line.

This is the precise scenario I ran into when porting some C code
into Ada some time ago. The SOX C code was oblivious to this
"error", but the Ada code that I ported caught it.  So this
was a real example of the C programmer failing to "do the
right thing", and Ada forcing _this_ programmer to
do "the right thing." ;-)

-- 
Warren W. Gay VE3WWG
http://home.cogeco.ca/~ve3wwg




  reply	other threads:[~2003-07-04 16:42 UTC|newest]

Thread overview: 130+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-06-20  3:18 Boeing and Dreamliner Robert Love
2003-06-20 10:29 ` Larry Kilgallen
2003-06-21  2:20   ` Mark A. Biggar
2003-06-23 10:45     ` Robert Kaiser
2003-06-23 11:43       ` Larry Kilgallen
2003-06-23 12:21         ` Martin Dowie
2003-06-23 12:23           ` Larry Kilgallen
2003-06-23 13:02             ` Martin Dowie
2003-06-23 13:02         ` Robert Kaiser
2003-06-20 14:44 ` Matt Brenneke
2003-06-20 17:23   ` Wojtek Narczynski
2003-06-21  4:28     ` rleif
2003-06-22  3:56       ` Hyman Rosen
2003-06-22  9:15         ` Preben Randhol
2003-06-23 18:00           ` Mike Silva
2003-06-22 11:51         ` Larry Kilgallen
2003-06-22 13:37           ` Marin David Condic
2003-06-22 15:06             ` James Rogers
2003-06-22 15:52               ` Dmitry A. Kazakov
2003-06-22 18:18                 ` Tino Goertemoeller
2003-06-23  3:26               ` John R. Strohm
2003-06-23  5:54                 ` Robert I. Eachus
2003-06-23 10:12                   ` Understanding and Teaching: Who may teach Ada? Georg Bauhaus
2003-06-24  1:34                     ` Robert I. Eachus
2003-06-24 12:13                       ` Georg Bauhaus
2003-06-25  2:59                     ` John R. Strohm
2003-06-25  4:44                       ` Wesley Groleau
2003-06-25  5:55                         ` Anders Wirzenius
2003-06-25 14:03                       ` Georg Bauhaus
2003-06-23 21:08                   ` Boeing and Dreamliner Alexander Kopilovitch
2003-06-24  3:16                     ` Robert I. Eachus
2003-06-23 15:40                 ` Wesley Groleau
2003-06-23  5:04               ` rleif
2003-06-22 18:07           ` Frank J. Lhota
2003-06-23  9:32           ` AG
2003-06-23 11:12             ` Larry Kilgallen
2003-06-27 16:30             ` Richard Riehle
2003-06-22 15:10         ` Vinzent Hoefler
2003-06-22 18:22         ` Robert I. Eachus
2003-06-23 18:24           ` Mike Silva
2003-06-24  2:13           ` Alexander Kopilovitch
2003-06-24  2:35             ` Hyman Rosen
2003-06-24  5:22               ` Mike Silva
2003-06-24  6:14                 ` Hyman Rosen
2003-06-24  6:38                   ` tmoran
2003-06-24 13:08                     ` Hyman Rosen
2003-06-24 17:59                       ` tmoran
2003-06-24 18:01                       ` Mike Silva
2003-06-25 11:50                         ` Marin David Condic
2003-06-24 10:56                   ` Preben Randhol
2003-06-24 13:04                     ` Hyman Rosen
2003-06-24 20:54                   ` Pascal Obry
2003-06-24 12:06                 ` Marin David Condic
2003-06-24 13:12                   ` Hyman Rosen
2003-06-24 14:20                     ` Larry Kilgallen
2003-06-24 14:33                     ` Vinzent Hoefler
2003-06-24 20:37                     ` Alexander Kopilovitch
2003-06-25 11:58                     ` Marin David Condic
2003-06-24  7:10               ` Robert I. Eachus
2003-06-24  7:35                 ` Hyman Rosen
2003-06-24 17:29                   ` Robert I. Eachus
2003-06-27 17:15                     ` Richard Riehle
2003-06-27 17:31                       ` Warren W. Gay VE3WWG
2003-06-28  1:27                         ` Wesley Groleau
2003-06-28  6:32                           ` Robert I. Eachus
2003-06-27 17:38                       ` Preben Randhol
2003-06-28  2:18                       ` Alexander Kopilovitch
2003-06-24 16:35                 ` Warren W. Gay VE3WWG
2003-06-24 10:48               ` Preben Randhol
2003-06-24 13:16                 ` Hyman Rosen
2003-06-24 14:49                   ` Preben Randhol
2003-06-24 22:48                   ` Wesley Groleau
2003-06-25  0:41                     ` Hyman Rosen
2003-06-25 10:28                       ` Dmitry A. Kazakov
2003-06-25 21:15                         ` Robert I. Eachus
2003-06-26  2:30                           ` Alexander Kopilovitch
2003-06-27 17:19                           ` Richard Riehle
2003-06-25 18:00                       ` Mike Silva
2003-06-24  6:22             ` Robert I. Eachus
2003-06-24 13:21               ` Hyman Rosen
2003-06-24 16:38                 ` 
2003-06-24 18:00                 ` Robert I. Eachus
2003-06-26  2:00               ` Alexander Kopilovitch
2003-06-26 19:12                 ` Robert I. Eachus
2003-06-27  2:21                   ` Alexander Kopilovitch
     [not found]         ` <ts6hs-vk4.ln1@beastie.ix.netcom.com>
2003-06-22 18:59           ` Simon Wright
2003-06-23 18:20         ` Pascal Obry
2003-06-25  8:08         ` Thierry Lelegard
2003-06-27 16:24         ` Richard Riehle
2003-06-27 16:31           ` Hyman Rosen
2003-06-27 18:08             ` Robert I. Eachus
2003-06-27 19:00               ` Hyman Rosen
2003-06-28  0:33             ` Alexander Kopilovitch
2003-06-29  6:54               ` Hyman Rosen
2003-06-29  8:30                 ` AG
2003-06-29 16:06                 ` Chad R. Meiners
2003-06-29 20:20                   ` Hyman Rosen
2003-06-30 13:50                     ` Alexander Kopilovitch
     [not found]                     ` <t9i7t-0i3.ln1@beastie.ix.netcom.com>
2003-07-01 11:55                       ` Marin David Condic
2003-07-02 15:02                         ` rleif
2003-07-03  7:38                       ` Robert I. Eachus
2003-06-29 16:56                 ` Alexander Kopilovitch
2003-06-29 20:22                   ` Hyman Rosen
2003-06-29 21:09                     ` Larry Kilgallen
2003-06-29 21:19                       ` Hyman Rosen
2003-06-29 21:31                         ` Larry Kilgallen
2003-06-29 21:39                           ` Hyman Rosen
2003-06-30  0:07                             ` Berend de Boer
2003-06-29 18:26                 ` Richard Riehle
2003-06-29 20:45                   ` Hyman Rosen
2003-06-30 15:55                     ` Warren W. Gay VE3WWG
2003-07-04  0:21                       ` Dave Thompson
2003-07-04 16:42                         ` Warren W. Gay VE3WWG [this message]
2003-07-01  1:08                     ` Alexander Kopilovitch
2003-07-03 16:43                       ` Warren W. Gay VE3WWG
2003-07-01  1:14                     ` Richard Riehle
2003-07-01  5:31                       ` Hyman Rosen
2003-07-01  7:30                         ` Dmitry A. Kazakov
2003-07-01 12:57                           ` John R. Strohm
2003-07-04  3:56                             ` Wesley Groleau
2003-07-04  5:05                               ` Robert I. Eachus
2003-06-21 12:55   ` Pascal Obry
2003-06-20 19:59 ` Jeffrey Carter
2003-06-20 22:40   ` Mark Lorenzen
2003-06-20 21:21     ` Jeffrey Carter
2003-06-21  4:28     ` rleif
2003-06-21  8:05     ` Preben Randhol
2003-06-21 10:32       ` Bobby D. Bryant
2003-06-21 10:44         ` Preben Randhol
2003-06-23 16:57           ` Warren W. Gay VE3WWG
replies disabled

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