DIP 1006 - Preliminary Review Round 1
Paolo Invernizzi
paolo.invernizzi at gmail.com
Wed Mar 7 08:39:30 UTC 2018
On Tuesday, 6 March 2018 at 20:03:11 UTC, Jonathan M Davis wrote:
> On Tuesday, March 06, 2018 18:49:42 Paolo Invernizzi via
> Digitalmars-d wrote:
>> I simply don't understand why enforce or a custom check can't
>> be used @safe code, if you want that behaviour.
>>
>> If the program must HALT on this or that, well, what is better
>> than an explicit piece of unremovable code that do that?
>> Instead of writing 'assert', one should write 'enforce'.
>
> 1. It's quite common for folks to want to add debugging checks
> that are compiled out in -release. That's exactly what assert
> is for in pretty much every lanugage that has it. It's what
> folks expect to use and what your average programmer will use
> without thinking about @safety issues at all. It's what
> everyone uses right now, and I'm pretty sure that almost
> everyone using it has no clue that Walter considers it okay for
> assertions to introduce optimizations which are not memory
> safe, and if/when he does do so, a lot of D code will suddenly
> have @safe code which is not memory safe. Such problems will
> hopefully be hit rarely, because hopefully, the code will have
> been well-tested, and the assertions will have found all of the
> related bugs, but there's every possibility that some bugs will
> manage to not be caught, thereby resulting in @safe code being
> unsafe. No one is going to be looking to use solutions other
> than assertions for what assertions are for unless we start
> telling everyone to avoid assertions, because they make @safe
> code unsafe. And honestly, if assertions make @safe code
> unsafe, I don't see a good argument for using them at all. If I
> didn't care about code being @safe, I wouldn't be using @safe.
> @safe is supposed to guarantee that the code is memory safe.
Understood. Are asking that UB should not include memory
corruptions?
> 2. I think that it's fundamentally a terrible idea to allow
> built-in language features to violate @safe. Aside from issues
> related to @trusted being misused, @safe code should be
> guaranteed to be memory safe, and it should be considered a bug
> any time that it isn't. That's why @safe exists. No one should
> have to be looking at @safe code to track down memory safety
> problems. And if they do, then @safe is not doing it's job.
> Array bounds checks are left in @safe code for exactly these
> reasons.
So, the request is to just leave assert active as a default in
@safe code, like the bounds checks?
> I'm all for introducing optimizations that do not violate
> @safe, but if we allow @safe code to be unsafe, then why do we
> even have it?
So, the reasoning is that UB should not lead to memory
corruption, right?
/P
More information about the Digitalmars-d
mailing list