Re:A Usable C++ Dialect That Is Safe Against Memory Corruption
by gpderetta on Thursday March 15, 2018 @06:03PM
(#16596879)
> a fundamental misunderstanding of the problem
No kidding! There is one right here:
> Yes, in some cases the compiler can prove UB, and uses it to write optimiation
Compilers do not prove UB , on the contrary they postulate no-UB and then use this axiom to prove other properties of the code.
Re:A Usable C++ Dialect That Is Safe Against Memory Corruption
by staticassertion on Thursday March 15, 2018 @07:02PM
(#16597244)
I suppose that's true, yes. My point was more that your compiler is not hitting a line of code and saying "I know this is or is not UB" because it can not do that in the general case - it is definitely incorrect to say it is 'proving' this. Would you consider that an accurate representation?
Re:A Usable C++ Dialect That Is Safe Against Memory Corruption
by masklinn on Friday March 16, 2018 @08:14AM
(#16600079)
> My point was more that your compiler is not hitting a line of code and saying "I know this is or is not UB" because it can not do that in the general case
I think it's still a (cause of) misunderstanding. For the compiler, UBs are situations which axiomatically can not occur. "This is UB" is not a concept, because the compiler assumes at all point that UBs can not occur.
The compiler doesn't go "oh you're dereferencing a pointer which may be null, fuck you", it goes "you're dereferencing a pointer so it can't be null, and thus I can remove anything assuming possible nullability".
Re:A Usable C++ Dialect That Is Safe Against Memory Corruption
by staticassertion on Friday March 16, 2018 @12:25PM
(#16601699)
> The compiler doesn't go "oh you're dereferencing a pointer which may be null, fuck you", it goes "you're dereferencing a pointer so it can't be null, and thus I can remove anything assuming possible nullability".
:) This is what I'm trying to say.
When people say "just fix this in compilers, don't compile when they run into UB" it's a fundamental misunderstanding of the problem. Yes, in some cases the compiler can prove UB, and uses it to write optimiations, but it doesn't prove that all code is not invoking UB.