On Friday, 8 July 2016 at 19:26:59 UTC, Andrei Alexandrescu wrote:
On 07/08/2016 02:42 PM, deadalnix wrote:
It is meaningless because sometime, you have A and B that are both safe on their own, but doing both is unsafe. In which case A or B need to be banned, but nothing allows to know which one. This isn't a bug, this is
a failure to have a principled approach to safety.

What would be a good example? Is there a bug report for it?


For instance:

@safe
int foo(int *iPtr) {
        return *iPtr;
}

@safe
int bar(int[] iSlice) {
        return foo(iSlice.ptr);
}

foo assume that creating an invalid pointer is not safe, while bar assume that .ptr is safe as it doesn't access memory. If the slice's size is 0, that is not safe.

This is one such case where each of this operation is safe granted some preconditions, but violate each other's preconditions so using both is unsafe.

The position is inconsistent because the dictatorship refuses to compromise on mutually exclusive goals. For instance, @safe is defined as ensuring memory safety. But not against undefined behaviors (in fact Walter promote the use of UB in various situations, for instance when it comes to shared). You CANNOT have undefined behavior that are defined as
being memory safe.

I agree with that. What would be a good example? Where is the reference to Walter's promotion of UB in @safe code?


I don't have a specific reference to point to right now. However, there have been several event of "@safe guarantee memory safety, it doesn't protect against X" while X is undefined behavior most of the time.

Reply via email to