From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,e01fe1b326df26d4 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news3.google.com!newsfeed.stanford.edu!logbridge.uoregon.edu!newsfeeds.ihug.co.nz!ihug.co.nz!news.xtra.co.nz!53ab2750!not-for-mail From: "Lurker" Newsgroups: comp.lang.ada References: <79ahr0jozmqb$.10jzllrcjpmsv.dlg@40tude.net> Subject: Re: Division by zero X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1437 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441 Message-ID: Date: Sun, 12 Jun 2005 21:43:16 +1200 NNTP-Posting-Host: 219.88.100.226 X-Complaints-To: abuse@xtra.co.nz X-Trace: news.xtra.co.nz 1118569265 219.88.100.226 (Sun, 12 Jun 2005 21:41:05 NZST) NNTP-Posting-Date: Sun, 12 Jun 2005 21:41:05 NZST Organization: Xtra Xref: g2news1.google.com comp.lang.ada:11293 Date: 2005-06-12T21:43:16+12:00 List-Id: "Dmitry A. Kazakov" wrote in message news:79ahr0jozmqb$.10jzllrcjpmsv.dlg@40tude.net... > > 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. OK, I see you point. But, pratically speaking, the chances are that that construct was an error. Perhaps a warning or some such would be enough. If whoever wrote that was sure that's what they meant - fine. But I was always under the impression that the Ada philosophy was to avoid accidental mistakes as much as possible. And division by zero sure should qualify as a suspect at least - not something that just happily gets compiled. > >> 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. (:-)) I'm afraid I don't follow your logic there. Do you really mean that a constant declared as = 0 cannot be detected at compile time? Yes, the effects of using it to divide something may or may not be ok. But that would equally apply to dividing a literal 1 by it, wouldn't it? (Again, I realise your point about static vs other expressions. But c'mon, unless someone specifically allows and handles cases like that, surely the safest bet would be to at least point out that there is something fishy going on and a "moral equivalent" of asking "are you sure"? > > -- > Regards, > Dmitry A. Kazakov > http://www.dmitry-kazakov.de