I am surprised by some of the changes Prof. Wirth made to Oberon-07:
1) Removing the "else" from the case statement. In the document about Oberon-07
I noticed that he implemented a software trap for the "case" construct failing to
accomodate all possibilities. This seems like a bit extreme. He does not provide
any explanation for the change, even in the document about the differences
between Oberon and Oberon-07. An "else" statement has an obvious semantics:
it's an alternative whose guard is the negation of the disjunction of all the other
case conditions.
2) Elimination of the "loop" statement. Wirth claims that this does not have a consistent
logical semantics, but, as long as the loop is limited to having just one "exit", it can
be transformed to a "while" loop by repeating the code before the "exit" above the
"while" and after the code following the "exit" and before the loop's end.
3) Requiring functions to have only a single "return" statement. If someone took it into
their head to implement a compiler with last-call-optimization, i.e. transforming a
final call into a jump instead, needing to funnel the control flow to a single return point
would force the last-calls to be so no longer. By the way, I have always been
curious as to why more imperative language compilers don't implement LCO--anyone
have any comments?

-- Nicholas