From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Division by zero
Date: Sun, 12 Jun 2005 10:39:16 +0200
Date: 2005-06-12T10:39:11+02:00 [thread overview]
Message-ID: <79ahr0jozmqb$.10jzllrcjpmsv.dlg@40tude.net> (raw)
In-Reply-To: PANqe.6723$U4.968854@news.xtra.co.nz
On Sun, 12 Jun 2005 15:04:17 +1200, Lurker wrote:
> "David C. Hoos, Sr." <david.c.hoos.sr@ada95.com> wrote in message
> news:mailman.16.1118541539.17633.comp.lang.ada@ada-france.org...
>> The reason for the difference is that because both terms of line 1
>> are known at compile time, the computation is performed at compile
>> time, and thus raises the exception.
>>
>> Since the numerator of line 2 is a variable, the compiler does not
>> attempt any computation, and thus does not signal an error.
>
> Well, yes. But can't it tell that division by zero is always wrong
> regardless?
No, it is not, because it has a defined effect: Constraint_Error. Formally
speaking division by zero is not a contract violation and thus cannot be
"wrong". Consider the following:
A : constant Integer := 0;
B : Integer := 1;
begin
B := B / A;
Put_Line ("Hello!");
exception
when others =>
Put_Line ("Good bye!");
The above is a valid program, which should print "Good bye!". At the same
time the following is *wrong*:
A : constant Integer := 0;
B : constant Integer := 1;
C : Integer;
begin
C := B / A;
B/A is a static expression, which has to have a value at compile-time.
The difference is not in what the compiler might know, but in what it must
know.
> What has actually happened (outside that toy example)
> was that there was a constant declared in one place and used in
> many others. Someone went ahead and changed it (for a good
> reason) to zero. However, one of the uses of that constant was
> to divide by it.
>
>> Constraint_Error will be raised at runtime.
>
> It was. My question was - should it have been caught
> at compile time instead?
I don't think it should. A class of errors which cannot be detected at
compile time cannot be compile-time errors. Or, in other words, if you
cannot rely on the compiler, you should not pretend you can. (:-))
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2005-06-12 8:39 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-06-11 21:03 Division by zero Lurker
2005-06-12 2:00 ` David C. Hoos, Sr.
2005-06-12 3:04 ` Lurker
2005-06-12 8:39 ` Dmitry A. Kazakov [this message]
2005-06-12 9:43 ` Lurker
2005-06-12 10:36 ` Marius Amado Alves
2005-06-12 11:53 ` Dmitry A. Kazakov
2005-06-13 8:03 ` Ole-Hjalmar Kristensen
2005-06-12 13:10 ` Robert A Duff
2005-06-12 16:55 ` Jeffrey Carter
2005-06-13 3:22 ` Keith Thompson
2005-06-14 2:14 ` Jeffrey Carter
2005-06-13 8:47 ` Lurker
2005-06-14 2:19 ` Jeffrey Carter
2005-06-14 8:35 ` Keith Thompson
2005-06-13 12:19 ` Robert A Duff
2005-06-14 2:31 ` Jeffrey Carter
2005-06-14 8:21 ` Lurker
2005-06-14 20:22 ` Randy Brukardt
2005-06-28 21:22 ` Robert A Duff
2005-06-29 5:50 ` Lurker
2005-06-29 13:27 ` Robert A Duff
2005-06-29 13:54 ` Dmitry A. Kazakov
2005-06-29 16:03 ` Robert A Duff
2005-06-30 1:19 ` Lurker
2005-06-30 11:16 ` Stuart Palin
2005-06-29 13:50 ` Dmitry A. Kazakov
2005-06-29 16:07 ` Robert A Duff
2005-06-30 8:27 ` Dmitry A. Kazakov
2005-06-29 9:20 ` Lurker
2005-06-29 9:49 ` Christoph Grein
2005-06-29 10:40 ` Lurker
2005-06-29 11:04 ` Jeff Creem
2005-06-29 12:28 ` Martin Dowie
2005-06-29 13:40 ` Robert A Duff
[not found] ` <5sana1pm436l6vboifijqblu0irf84afkr@4ax.com>
2005-06-12 17:38 ` Simon Wright
2005-06-12 12:21 ` Robert A Duff
2005-06-12 22:53 ` Georg Bauhaus
2005-06-13 8:34 ` Lurker
2005-06-13 8:54 ` Marius Amado Alves
2005-06-13 17:59 ` Simon Wright
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox