> Macro is okay. Procedure is not okay. Break is a procedure.
Why do you believe this to matter? Smalltalk's signaling and exception handling (both `catch` and `finally` equivalent) uses regular messages and blocks (with hooks into the interpreter obviously). What value do you see in making special syntax things which need not be so, ease of "optimizations" (such as compiling a block to a jump)?
Don't you understand the sheer beauty of the undefined behavior? It is not the beauty of a great painting, it's the beauty of the winter mountain: shining, tantalizing, with the stability of a marble on a needle and ready to take your life at the lightest sneeze.
Pascal has had labeled goto from its conception. Break is just an extension / syntactic convenience. Even in C and C++ i still use goto when I have to break out of multilevel loops.