Oberon-07 Frequently Asked Questions

3 January 2016


Questions and Answers

What is Oberon-07?

Oberon-07 is the current programming language designed by Professor Niklaus Emil Wirth. It is a revision of Oberon, influenced by Oberon-2 and a custom Oberon implementation from 1998 called Oberon-SA.

Why is Oberon-07 sometimes 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 and 2008, a new Oberon Report spoke of the new language Oberon-07, 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.

What texts are available for learning Oberon-07?

The text Programming in Oberon (PDF), along with the current (Revised) Oberon Report (PDF) written by Professor Wirth, provide a solid ground for learning Oberon-07. See the Oberon texts page for more.

A more basic introduction to programming doesn't yet exist for Oberon-07. 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.

If you have never worked with a computer before, or need a basic introduction to computers in general, Professor Brian Wilson Kernighan's D is for Digital is a good starting point.

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 are reserved words in upper-case?

This was originally to avoid naming collisions with existing source texts, such as from Pascal. However, it also keeps out of the way of user-defined variables, procedures, and modules which are rarely upper-case.