checkedint call removal
bearophile via Digitalmars-d
digitalmars-d at puremagic.com
Mon Jul 28 01:42:15 PDT 2014
Walter:
>Instead of adding more language features,<
Perhaps you can't solve this problem in a sufficiently clean way
without adding language features (and a assume() is not the
solution, see below).
---------------------
Ola Fosheim:
> Conflating run time debug checks with programmer provided
> guarantees sounds dangerous. Call it "assume" not "assert" then.
But this still missed the point. I am not interested in
annotations, in this thread I am not asking for a built-in
assume() (or for some weird kind kind of assert() that is much
worse).
Let's go back to the second example I've shown:
void main() {
import std.stdio, core.checkedint;
ubyte x = 100;
ubyte y = 200;
bool overflow = false;
immutable result = muls(x, y, overflow);
assert(!overflow);
writeln("Product: ", result);
}
Here I am not willing to add an assume(). Here at the call point
of muls() x and y have a full range of ubytes, so the range
analysis tell the compiler their product will not overflow, so it
can replace the muls() with a regular product and leave overflow
untouched. This is faster.
The same kind of optimization is desired for a SInt or other
library-defined types. So the point of this discussion is how to
do this. The problem is that the compiler has some static
information about ranges, but to optimize away user-defined types
such information needs to be read and given to "static ifs" to
replace the calls to muls() to calls to regular operations.
Bye,
bearophile
More information about the Digitalmars-d
mailing list