Performance: the C case C's performance comes from low-level programming. The cost is hazardous behavior, safeness being the programmer's job, which doesn't scale. Performance doesn't need to imply unsafeness using higher-level libraries gives the same performance without loosing safeness separating low-level programming from high-level programming is a solution (see C# and pliant) optimizing C programs is hard and/or dangerous explicit parallelism hidden complex memory aliasing (eg: untagged unions) no way to differentiate requirements from unthought choices (eg: aligned vs non-aligned structs) program analysis very hard