On Saturday, 28 July 2012 at 21:03:20 UTC, Jonathan M Davis wrote:
On Saturday, July 28, 2012 22:52:32 David Nadlinger wrote:
Maybe it would be a good idea to also allow
`@trusted(emplace!S)(mem, cast(S)(*_range).save)`, with semantics
similar to TRUSTED? Or even applying @trusted to arbitrary
expressions, similar to `checked` in C#?

Even the cast is unsafe. Basically, that entire line is @system and needs to
be @trusted except for (*_range).save.

Aww, snap, missed that. Saving (*_range).save to a temporary would introduce an unnecessary copy, right?

In any case, I've found TRUSTED to be convenient when dealing with incorrectly marked Phobos/C library functions, but I'm still unsure it is worth the added maintenance liabilities incurred by it being non-standard. It certainly isn't a replacement for @trusted blocks.

Maybe allowing to apply @trusted at both expression and »block« level would really be an interesting direction: I've had a look at C#'s checked/unchecked keywords [1], which enable/disable integer overflow checking, and they work exactly like that.

I must admit that I never actually used them in the little amount of C# code I wrote so far, but C# is generally regarded to be a well-designed language and similar enough to D that this makes me quite confident that implementing @trusted like that could be pulled off without feeling overly alien.

This still wouldn't solve your save() problem, though, as it acts »the wrong way« round, so I'm not sure if it would be worth the added complexity over allowing it just at the statement level…

David


[1] http://msdn.microsoft.com/en-us/library/74b4xzyw(v=vs.80).aspx

Reply via email to