ISO C became unusable for operating systems development
One thing that is not mentioned in the article, is that next to undefined behavior, there is also implementation defined behavior.<p>For example, if signed integer overflow would be implementation defined behavior, then any weirdness would be limited to just the integer operation that overflows.<p>Lots of other stuff can be expressed as implementation defined behavior. That would probably kill some optimizations.<p>So the question is more, do we want a portable assembler? In that case as many C constructs as possible need have defined behavior. Either defined by the standard or as part of the compiler documentation.<p>Another possibily is to have standards for C on x86, amd64, arm, etc. Then we can strictly define signed integer overflow, etc. And say that on x86, pointers don&#x27;t have alignment, so a pointer that points to storage of suitable size can be used to stored an object of different type, etc.<p>If the goal is to run SPEC as fast as possible, then making sure every program trigger undefined behavior is the way to go.