I like having a few different loops to keep code more readable. I think there should be two at a minimum for whether the condition is before or after the looped code.
I agree with the rest, but the rest of the language is great.
The last point is very likely by design: Only when you see a LOOP do you have to worry about early exits. For the other, more common constructs, you instantly know there won’t be an exit somewhere in the middle, and you can reason about its termination behavior solely based on the loop conditional.
Early Pascal/Modula/Oberons were extremely anal about loops (of any kind) never having any early exits, ever.
Then they ran into the real world.
So each consecutive version of Oberon either added early returns or removed early returns. Sometimes like clockwork. And also added/removed other types of loops in pursuit of some unspecified ideal of simplicity.
I agree with the rest, but the rest of the language is great.