On 2/5/15 3:54 PM, Walter Bright wrote:
On 2/5/2015 12:25 PM, Steven Schveighoffer wrote:
On 2/5/15 3:13 PM, Walter Bright wrote:
So the question is, what does @trusted actually buy you, since the
compiler can't check it?

It serves as notice that "This function merits special attention during
code review to check that it has a safe interface and that its
implementation is correct."


That also applies to @safe functions since they can call @trusted
functions.

No - the @trusted function is reviewed to ensure it has a safe
interface. Then there is no need to review for safety anyone that calls
it. It's the whole point.

So you're saying that @safe is mechanically verified as long as @trusted functions are manually reviewed. It's that manually reviewed part that I think we have an issue with. And there is definitely a feel of "I can use trusted because I know I will only call it this way" without considering future possible calls.

I fully expect we can devise rules to make sure @trusted memory details do not leak out of the functions in an unsafe way (and have a much better, @safer code base). But it would be nice if the compiler helped enforce them.

In essense, @trusted buys you headaches. I think we should try to
lessen them.

An aspect of a well-designed encapsulation is the number of @trusted
interfaces is minimized. If you find an abstraction that has @trusted
sprinkled liberally through it, it's an indicator of a failed abstraction.


I think you just made this up :)

But I agree that @trusted should be used sparingly not liberally. The problem is that when faced with such a huge function that calls one non-@safe one, marking the whole thing as @trusted disables all the mechanical verification for everything.

There has to be a better way.

-Steve

Reply via email to