On Wednesday, 6 February 2013 at 18:26:17 UTC, Robert wrote:
Making the following code illegal:

import std.stdio;
@safe {
int test1() @system {
    int* p=new int;
    *p++=8;
    return 7;
}
}

So if you Mark code with @safe you can not Mark parts of it to be @system. This would make things possible like compile time import of configurations, which would currently impossible in a safe way.

Agreed, although you can always tighten the code rather than limit it. @trusted would be the in between cases.

 So this would be the behavior?

  @system {
    int test1() {} //@system
    int test1() @safe {}    //of course!
    int test1() @trusted {} //of course!
    a = b;
  }

  @trusted { //disallowed for (bulk) function/type declarations
             //intended only for bits of code or for functions:
//Otherwise an easy unchecked breeding ground for bugs!
    int test1() {}          //error
    int test1() @safe {}    //error
    int test1() @system {}  //error
    int test1() @trusted {} //error, yes it is, even if explicit
    a = b;
  }

  @safe {
    int test1() {} //@safe
    int test1() @trusted {} //will happen from time to time.
int test1() @system {} //error, cannot weaken code's restrictions
    a = b; //only if safe
  }

Reply via email to