On 5/19/17 5:12 AM, Moritz Maxeiner wrote:
On Thursday, 18 May 2017 at 12:12:18 UTC, Steven Schveighoffer wrote:
[...]

We still allow unsafe operations inside @safe code, using @trusted.
This is a necessary evil, but it's so very important that the base
libraries (druntime and phobos) keep this to a minimum, and that we
review those @trusted blocks to death.

That and we need to make sure it is understood by everyone using third
party @safe code that it is *not* a "I don't have to audit this code"
free card. It merely reduced the amount of code you need to review to
what is marked as @trusted (with regards to memory safety); as long as
you don't *know* whether some third party code is @safe or @trusted, you
(as the programmer) have to assume it is @trusted and that means you
have to extend trust to the author and cannot assume any of the @safe
guarantees for that code.

What we need are 2 things:

1. @trusted blocks need to be rock-solid in Phobos and Druntime. And as rare as possible. This provides a foundation to build completely @safe libraries. It's like atomics -- they are hugely important and very easy to get wrong. Leave the actual implementation to the pros. We should be the pros on phobos/druntime safety.

2. @trusted blocks in any project need to be considered red flags. You should not need to audit @safe code. What you need to do is audit @trusted code when it interacts with @safe code. If you can prove that in *all cases* the @safe code is still @safe even with the included @trusted blocks, then you don't have to audit @safe code that calls that "tainted" function.

If we get into "@safe really means @trusted" territory, we have lost.

-Steve

Reply via email to