This document tracks my experience of running examples and exercises in Eric Nikitin's introductory text to Oberon programming: Into the Realm of Oberon. The book was run on Oberon/F, when it's language was Oberon/L (essentially Oberon-2). I did an initial run through using Blackbox Component Builder (the Oberon/F successor), version 1.6, which sufficiently revises Oberon/L, to have a new language name: Component Pascal.
The Ofe
referred to in the book is a convention to avoid
naming collisions in the single directory design of the Oberon system,
similar to Medos. See the
Module
Registry. This is treated as a subsystem name in Blackbox. The convention
is likely not needed with Oberon compilers native to operating systems that
support file systems with multiple directories. It's not clear what
Ofe
refers to. Perhaps it's an acronym for Oberon/F Eric.
The FOR
statement, which includes BY
, is an
extension of Oberon-2 that is not part of the original language. It was
added back to Oberon by Wirth in is his 1996 book Compiler
Construction, and has remained since.
The Modula-2 reports explicitly state that comments were nested. However,
none of the Oberon(-1) reports do so. Even the earlier Oberon-2 reports do
not explictly identify this (the 1993 Oberon-2 report reads the same as
Wirth's, whereas the 1995 Oberon-2 report reads the same as the Modula-2
reports). There is no EBNF that defines comments. Therefore, a careful
reading seems to suggest that though nesting comments is certainly a valid,
and the more common, interpretation of Oberon and earlier Oberon-2 reports,
it could be suggested that not exlicitly allowing nesting comments in the
Oberon report suggests that not implementing nesting would also be valid.
However, the OCS.Get
function's comment
procedure
in Project Oberon (1992) recursively checks for comments, as does Oberon-0's
(1996).
Using Blackbox Component Builder 1.6
on Windows led identifying a couple of build issues. In
OfeParmtest,
, ChangeVal
uses parameter
valNumber
, then tries to output number
instead of
valNumber
. number
should be changed to
valNumber
in this instance.
In OfeRecord
, Execute
outputs
carB.price
with a size of 9. The program will compile and run,
but a size of 8 will make the output line up.
Type extension declarations, type bound procedures, and removal of the
COPY
built-in procedure require adapting programs from Oberon-2
to Component Pascal.
Chapter 3.3, LONGINT
is 32-bit, but in Blackbox it is 64-bit.
In OfeVal
, use INTEGER
not LONGINT
for
SET
compatibility.
©2015, 2019 David Egan Evans.