30 June 2023
See inf.ethz.ch/person/wirth/projects.html for a brief history of Wirth's work.
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).
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.
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.
See the Oberon-07 compilers page for more details.
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".
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).
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.
Copyright 2014, 2016, 2019-2021, 2023 by David Egan Evans.