02-Sep-2014 04:03, Walter Bright пишет:
On 8/31/2014 6:47 AM, Dmitry Olshansky wrote:
import core.stdc.string;
import trusted;

void main() @safe
{

     char[] msg = "Hello!".dup;
     char[] msg2 = msg;
     import trusted; // may also use static import for absolute clarity
     assert(call!memcmp(addrOf(msg[0]), addrOf(msg2[0]), msg.length)
== 0);
}

I don't agree with the notion of having primitives that provide escapes
from @safe - it means the interleaving of @safe and @system code becomes
too easy, and too easy to miss.


Make distinctive name like assumeSafe and it's going to be trivially grepable.

I also don't agree with the notion of having @trusted blocks of the form:

     @trusted {
         ... system code ...
     }


We already have a mechanism to do that - @trusted nested functions. The
code example becomes:

So there is need, but somehow requires a bunch of useless boilerplate, like repeating arguments and inventing creative names for local functions.

   void main() @safe {
      char[] msg = "Hello!".dup;
      char[] msg2 = msg;

      void checkEquals(const char[] msg, const char[] msg2) pure @trusted {
        assert(msg.length == msg2.length);
        assert(memcmp(msg.ptr, msg2.ptr, msg.length) == 0);
      }


So you think adding boilerplate will make function more easily verifiable? Time and statistics proven that more LOCs ==> more bugs. Especially highly repetitive patterns, because nobody actually reads them.



--
Dmitry Olshansky

Reply via email to