13 ms·
> Hopefully the programmer will be informed whenever the compiler decides it can treat some code as "undefined"? That's the wrong mental model. The compiler do
by cesarb 7y ago
> Hopefully the programmer will be informed whenever the compiler decides it can treat some code as "undefined"?
That's the wrong mental model. The compiler doesn't decide to treat some code as "undefined". Instead, the compiler assumes all code is not "undefined", and generates code according to that. The compiler might notice that the code is doing bad things, and warn the developer (or even return an error), but that's not guaranteed, since undefined behavior is generally things the compiler cannot easily check.
For an example, Rust guarantees that no two mutable references can reference the same place at the same time, even in unsafe code. If a function receives a pair of mutable references, the compiler assumes that they do not overlap. If they in fact overlap, the code generated by the compiler might do the wrong thing.
- acqq 7y agoI'm still on Linus' side: https://gcc.gnu.org/ml/gcc/2016-02/msg00381.html https://gcc.gnu.org/ml/gcc/2016-02/msg00381.html "The fact is, undefined compiler behavior is never a good idea. Not for serious projects. Performance doesn't come from occasional small and odd micro-optimizations. I care about performance a lot, and I actually look at generated code and do profiling etc. None of those three options have ever shown up as issues. But the incorrect code they generate? It has."