DIP 1006 - Preliminary Review Round 1
John Colvin
john.loughran.colvin at gmail.com
Mon Mar 5 22:30:28 UTC 2018
On Monday, 5 March 2018 at 10:30:12 UTC, Walter Bright wrote:
> The idea behind removal of the runtime checks is as a
> performance optimization done on a debugged program. It's like
> turning on or off array bounds checking. Many leave asserts and
> array bounds checking on even in released code to ensure memory
> safety.
>
> At a minimum, turning it off and on will illuminate just what
> the checks are costing you.
>
> It's at the option of the programmer.
void safeCode1(int a, ref int[2] b) @safe
{
assert(a < 2);
b[a] = 0;
}
So, if I compile this with `-release -O`, the compiler is free to
remove the bounds-check, which will cause a buffer overrun if `a
> 1`. Ok.
void safeCode2(int a, ref int[2] b) @safe
{
b[a] = 0;
}
And here the compiler is *not* free to remove the bounds check.
This just feels bad. Adding extra failsafes for my debug program
shouldn't make my release program less safe.
More information about the Digitalmars-d
mailing list