Oberon-07 Frequently Asked Questions

30 June 2023


Oberon Questions and Answers

See inf.ethz.ch/person/wirth/projects.html for a brief history of Wirth's work.

Why are reserved words in upper-case?

This was originally from the language Mesa to distinguish built-in reserved words (such as procedure and module names, e.g. SYSTEM) from user-defined names. Perhaps this could also help avoid naming collisions with existing source texts from Algol, Pascal, and Modula(-1).

Is there a standard for Oberon?

The "Oakwood Guidelines for Oberon-2 Compiler Developers" defined a minimal standard library, and extensions for classic Oberon implementations. This required that Oberon-2 (1991-1995) be treated as an extension (as later Object and Active Oberon extensions did). A note is worth being given that with the EBNF in Compiler Construction in 1996, the FOR statement of Oberon-2 was formally adopted.

What versions of Programming in Oberon are there?

What texts are available for learning Oberon-07?

See the Oberon texts page.

The only introduction to programming by Wirth was in Pascal in 1973. An older Oberon-2 text, Into the Realm of Oberon by Eric Nikitin, provides an excellent bare-bones introduction to programming that works well with any of the freely available and downloadable Oberon system versions. Nikitin's book also works well with Oberon Microsystems' Blackbox Component Builder, other than having to change to Component Pascal's syntax for RECORDs in a couple exercises.

For a fuller coverage of computing science, see J. Stanley Warford's Computing Fundamentals, using Component Pascal and the Blackbox Component Builder. For understanding some of the details behind Algorithms and Data Structures, and some of the details of formal methods addressed in Computing Fundamentals, see Edsgar Wybe Dijsktra's Method of Programming.

What compilers are available?

See the Oberon-07 compilers page for more details.

Why does CASE not have an ELSE or OTHERWISE clause?

To quote Prof. Wirth, "...the ELSE clause should be reserved for exceptional cases, i.e. those that are neither numerous among the possible cases nor do occur frequently during program execution."

This makes sense where CASE is normally implemented with a jump table. A common objection to not having an ELSE clause is related to it being an error if the case label does not match. Oberon-07 does not require it to be an error: a non-match will continue processing the next statement after CASE, as if there were a blank ELSE. (Potentially, a specialized implementation might decide on having a non-match be an error or trap.)

ELSE has issues with maintainence and readability. It potentially obfuscates the thinking of the programmer. Is something passed to CASE that falls to ELSE that was unintended? What did the author intend to fall to ELSE? It is possible this will be overlooked in a future refactoring.

The Oberon philosophy is to focus on essentials and keep it as simple as possible, but no simpler. As Wirth once wrote, be "engaged crusaders against home-made complexity".

Is CASE going to be removed from Oberon-07?

The note in the 2013 edition of "Oberon at a glance", and the explanation in Project Oberon (2013), suggest that CASE is to be restricted to use as a type guard in RECORD subtypes. This is similar to its original purpose as a type guard in variant records as introduced in Pascal. (Variant records are not used in Oberon.) However, this change was not reflected in any of the 2013-2014 reports, and both the 2007 and new 2013 forms of CASE are found in the Project Oberon source. Though it may be that the Report reflects the 2007/2013 form for compatibility, the 22 February 2015 Report clarified that both forms are valid (which is consistent with the source for Project Oberon posted to Wirth's website).

Why is Oberon-07 called Revised Oberon?

Revised Oberon originally referred to revisions made to the classic Oberon language (1988) as described in From Modula to Oberon, and the accompanying Report, in September 1989. The last reference to Revised Oberon was in the November 1990 revision, (the Reiser PIO has a minor revision to this version). In 2007, a new Oberon Report spoke of the new language Oberon-07, implemented in 2007, and subsequent revision of From Modula to Oberon again referred to Revised Oberon, as did some other papers.

Revised Oberon in Oberon-07 documents are a reference to the post-1988 Oberon language, re-revised in 2007. Perhaps Revised Oberon can now refer to the revisions made to Oberon-07 since 2011 for Project Oberon 2013, i.e. Oberon-11, but it appears that Wirth perceives Oberon-07 as another revision of the 1987/88 Oberon, a Revised Oberon since the first Revised Oberon of 1989, hence the date of 2007 in Oberon-07.