On Friday, 11 April 2014 at 14:06:33 UTC, Daniel Murphy wrote:
Trying to prevent developer stupidity is a lost cause.

Bounds checks are on by default. They are even on when you ask for 'fast-over-safe' aka -release. They get turned off when you explicitly ask for it.

But there is a cost, even to labeling the "one inner" function @trusted. Perhaps that function is extremely long and complex. There should be a way to say, "I still want all the @safety checks, except for this one critical array access, I have manually guaranteed the bounds". We don't have anything like that. All other safety checks are really static, this is the only runtime penalty for safety.

Something like (() @trusted => arr.ptr[index]) should do the trick.

The blunt flag approach is scary. @trusted is better, in that you can focus on one function at a time. But I think we need something more precise. Perhaps you should be able to have @trusted scopes, or @trusted expressions.

@trusted delegates get you 99.99% of the way there.

Hasn't there been a proposal before to allow @system/@trusted/@safe blocks, allowing it to be a bit more granular than at the function level? Maybe:

@trusted
{
    arr.ptr[index]
}

Could be lowered to (() @trusted => arr.ptr[index]).

Reply via email to