> Surprises based on undefined behavior are usually not surprises at runtime, because of superior tooling.
Yes, they are. Empirically ([1], just to name one example).
> Either way, C is best because it has both of those things (tooling, defined behavior).
C has tons of undefined behavior.
[1]: https://lwn.net/Articles/342330/