On Thu, 10 Apr 2014 12:49:26 -0400, Tommi <[email protected]> wrote:

On Thursday, 10 April 2014 at 15:00:34 UTC, Steven Schveighoffer wrote:

No, the author of the @safe code expects bounds checking, it's part of the requirements. To compile his code with it off is like having a -compilergeneratedhash switch that overrides any toHash functions with a compiler generated one. You are changing the agreement between the compiler and the code.

Obviously if such or any other compiler flags exist, their existence and behaviour has been specified in binding agreement between the compiler and the source code, and thus, no breach of contract has happened if such compiler flags were used.

A compiler flag is a blunt instrument. It affects all code the compiler touches, which may or may not affect code that you are intending to change.

For example:

// compiled without -noboundscheck
module compiledlib;

void foo(T)(T[] x) @safe
{
   x[5] = 3;
}

...

// compiled with -noboundscheck
main() @safe
{
   foo([1,2,3]); // memory now corrupted, no warning, no runtime error.
}

-Steve

Reply via email to