Earlier quoted context omitted.
> extremely awkward and limited exception handling The design is well-balanced and simple, and you can do essentially everything you can do with Java exceptions, just without complicated syntax constructions; see https://oberon-lang.github.io/2022/05/15/towards-exception-h... for more details.
PCALL(P), P cannot have a return type You cannot handle handle exceptions in a block of code without extracting into a procedure... that cannot return anything. Yeah, I doubt you can "do everything you can do with Java expressions. And of course Oberon's syntax construction is more complex: you need to have an external variable that gets populated, you need to match on three different types etc.
That's a one second problem; just give back the value via VAR parameter; the design decision is well justified in the referenced article.
> do everything you can do with Java expressions
"exceptions", not "expressions"; what do you think one cannot do with the Oberon approach?
> you need to have an external variable that gets populated
That's the Pascal philosophy; even an index variable of a FOR loop has to be declared up front in the declaration section; either you like it or not; personally I prefer the in-place declaration approach, but the language would become much more complex and it doesn't make sense to just rebuild C++ or Java.