DIP 1006 - Preliminary Review Round 1
Paolo Invernizzi
paolo.invernizzi at gmail.com
Wed Mar 7 13:24:19 UTC 2018
On Wednesday, 7 March 2018 at 11:52:05 UTC, Jonathan M Davis
wrote:
> On Wednesday, March 07, 2018 09:22:40 Paolo Invernizzi via
> Digitalmars-d wrote:
>> On Wednesday, 7 March 2018 at 09:11:10 UTC, Jonathan M Davis
>>
>> wrote:
>> >> So, the request is to just leave assert active as a default
>> >> in @safe code, like the bounds checks?
>> >
>> > No. I'm saying that no optimizations should be enabled which
>> > introduce potential memory corruption. Assertions should
>> > have zero impact on whether code is @safe or not unless the
>> > code in the condition or which is generating the message for
>> > the assertion is @system, and it's no more reasonable to
>> > assume that an assertion is going to pass than it is to
>> > assume that bounds checking won't fail. Regardless, the key
>> > thing here is that @safe code should be guaranteed to be
>> > @safe so long as @trusted code is vetted properly. It should
>> > _never_ be possible for the compiler to introduce memory
>> > safety issues into @safe code.
>> >
>> >> So, the reasoning is that UB should not lead to memory
>> >> corruption, right?
>> >
>> > The reasoning is that no @safe code should ever have memory
>> > corruptions in it unless it calls @trusted code that was
>> > incorrectly vetted by the programmer. The compiler is
>> > supposed to guarantee that @safe code is @safe just like
>> > it's supposed to guarantee that a const variable isn't
>> > mutated or that a pure function doesn't access mutable,
>> > global variables. And as such, introducing anything into
>> > @safe code which could be memory unsafe is a violation of
>> > the compiler's responsibility.
>>
>> Jonathan, I understand your reasoning, but it's not what I'm
>> asking: are we asking for UB that do not lead to memory
>> corruption?
>
> I'm saying that @safe code must not be violated by the
> compiler. Beyond that I'm not arguing about UB one way or the
> other.
And that's clear.
> If UB must be disallowed to avoid violating @safe, then it must
> be disallowed.
And how to do this, in practise I mean?
> If some form of UB can be allowed, because it's restricted in a
> manner that it can't violate @safe but may do something else
> stupid because the assertion would have failed if it weren't
> compiled out, I don't care.
And that's the original question: are we asking for UB that do
not lead to memory corruption?
> If an assertion would have failed if it weren't compiled out,
> then you have a bug regardless, and if the code is buggier
> because of an optimization, then that's fine with me. You have
> a bug either way.
Agreed.
> What isn't fine is that that result violate @safe, because that
> would defeat the entire purpose of @safe and make it far, far
> more difficult to track down @safety problems.
So, see above, the original question, agreed.
> Right now, since no optimizations like Walter has been talking
> about are done by the compiler, if you have memory corruption,
> you know that you only have to look at @system and @trusted
> code to find it, whereas with the unsafe optimizations that
> Walter is talking about, it then becomes possible that you're
> going to have to look through the entire program to find the
> problem.
Or you can just turn on assertion, right?
If we have corrupted memory in release, there's a bug, somewhere,
in the logic or in the implementation of the logic.
As you have told, we must audit @system and @trusted, we can
imagine to use static checkers or some strange beast like that.
But, while doing that, I think that the most common practise is
keep running the code with assertion on, do you agree?
> And right now, you can be sure that you don't have @safety
> problems in @safe code if you use @trusted correctly, whereas
> with what Walter is talking about, simply adding an assertion
> could add @safety problems to your code.
Nope, not adding an assertion, but having the process in UB state.
And we are back again to the original question.
/Paolo
More information about the Digitalmars-d
mailing list