On Monday, 9 February 2015 at 10:16:48 UTC, Walter Bright wrote:
On 2/9/2015 1:36 AM, Dicebot wrote:
 string toUpper(string s) @safe
 {
    char[] r = new char[s.length];
    foreach (i, c; s)
   r[i] = toUpper(c);
    return cast(string)r; // <== unsafe operation
 }

Shouldn't that be `return assumeUnique(r)` instead?

assumeUnique does a little more than assume the argument is unique - it also casts it, which is not a necessary consequence of holding a unique reference. For the purpose of this article, I'd rather have the unsafe cast be explicit rather than a side effect.

What I have meant is that here cast is only safe under assumption that casted slice is unique (has not other referenced). `assumeUnique` is supposed to exactly communicate that to the reader in most idiomatic manner. It would be still inferred as @system here so rules won't be compromised.

Introducing the 'trusted' template to be put in std.conv:

@trusted auto trusted(alias fun)() { return fun(); }

Is this guaranteed to be inlined in frontend?

pragma(inline, true) is not available yet!

And this is exactly why I am asking ;) Wide usage of this idiom before inlining is guaranteed may result in performance regressions.

Shouldn't it better be called `system` to denote operation is not actually trusted?

Andrei had the idea that one could simply grep the code for 'trusted' and thereby flag the code (trusted and @trusted) that merits special attention. I agreed it was a good idea.

Fine by me.

Reply via email to