I get to use one of my favorite Hitchhiker's Guide to the Galaxy quotes:
"What we demand is rigidly defined areas of doubt and uncertainty".
In other words, as long as it is clear when the behaviour becomes undefined, if your application does not use any undefined behaviour, then it's entirely possible to determine what your program does.
The C language specification has deliberately done this from the start, and it works well there.