[Oberon] Runtime Overflow Checks
Chris Burrows
chris at cfbsoftware.com
Sun May 3 13:42:34 CEST 2020
Thanks Jörg that's useful to know. I did wonder what SYSTEM.COND was intended to be used for.
> -----Original Message-----
> From: Jörg [mailto:joerg.straube at iaeth.ch]
> Sent: Sunday, 3 May 2020 7:58 PM
> To: chris at cfbsoftware.com; ETH Oberon and related systems
> Subject: Re: [Oberon] Runtime Overflow Checks (was: Negative integer
> literals in Oberon)
>
> Chris
>
> Such a hidden feature does exist in the Oberon-07 compiler as well:
> i := 47000;
> i := i * 47000;
> IF SYSTEM.COND(0) THEN Out.String("overflow"); Out.Ln END;
>
> The parameter is the condition you like to check.
>
> The case above could be catched with this as well
> IF i < 0 THEN Out.String("overflow"); Out.Ln END;
>
> br
> J�rg
>
> ?Am 03.05.20, 02:22 schrieb "Oberon im Auftrag von Chris Burrows" <oberon-
> bounces at lists.inf.ethz.ch im Auftrag von chris at cfbsoftware.com>:
>
> > -----Original Message-----
> > From: Oberon [mailto:oberon-bounces at lists.inf.ethz.ch] On Behalf Of
> > dave at brownsmeet.com
> > Sent: Saturday, 2 May 2020 11:49 PM
> > To: ETH Oberon and related systems
> > Subject: Re: [Oberon] Negative integer literals in Oberon
> >
> > Personally I am surprised there is not more support in compilers (of
> all
> > languages) for generating run time integer overflow checking code.
> >
>
> Inevitably run time integer overflow checking code leads to an impact on
> performance. Assuming that such an impact is considered to be acceptable,
> the next question is: What should a runtime system do when it detects an
> integer overflow? Some might say it should cause an application to come to
> an abrupt halt in mid-flight. That is not always desirable behaviour.
>
> To be palatable, systems that do generate runtime integer overflow
> checks also need to allow the programmer to disable them. If the checks can
> be turned on and off at will it becomes more difficult to verify that the
> application is correct. Hence, the scope of such switches must be as local
> as possible e.g. a single statement.
>
> An alternative solution is to give the programmer a means to detect when
> overflow has occurred rather than generating runtime overflow checks by
> default. The programmer would have a much better idea than the compiler
> implementer of when they were required and the best course of action to take
> when they were detcted. One example I have seen of this was in Wirth's
> Oberon-07 ARM compiler. This had an additional function SYSTEM.OVFL. My
> understanding is that this returns TRUE if the previous assignment generated
> an overflow condition that was detectable by the hardware. E.g. you could
> write something like:
>
> (* untested! *)
> j := 1;
> FOR i := 1 TO 128 DO
> j := j * 2;
> IF SYSTEM.OVFL(j) THEN Out.String("Size of INTEGER in bits = ");
> Out.Int(i, 0) END
> END;
>
> Regards,
> Chris Burrows
> CFB Software
> https://www.astrobe.com
>
>
>
>
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon
>
More information about the Oberon
mailing list