by Rochus Keller
The Oberon+ language definition started as a union of the Oberon-07 and Oberon-2 language definitions. Since both Oberon-2 and Oberon-07 are an extension of the first Oberon version (1987 and 1990), the Oberon+ language definition therefore also includes the original Oberon language. This means, that in principle each program written in Oberon up to Oberon-2 and including Oberon-07 is compatible with the Oberon+ compiler. There is one exception at which we will look below.
Oberon-2 added the following elements to the original Oberon:
Oberon-07 (revision 3.5.2016) also describes itself as an extension of the original Oberon (thus ignoring most of the Oberon-2 extensions); here is a list of the major changes in Oberon-07:
Since Oberon+ includes a union of Oberon-2 and Oberon-07, all removals done by Oberon-07 besides the last one (“non-local access”) are ignored. The resulting redundancy with WITH and type CASE is tolerated in favor of compatibility. To accomodate the effect of the Oberon-07 RETURN, procedure bodies can either consist of BEGIN plus statement sequence, or a RETURN statement. Oberon-07 programs with read-only access to imported module variables still run on Oberon+ without modification (they simply do without write access); if the author of an Oberon-07 module wants to enforce read-only exports of the module variables, visibility mark must be changed to “-“.
The missing non-local access of Oberon+ can cause incompatibilities with programs written in original Oberon or Oberon-2, although only a fraction of the existing code seems to use this feature. Whether it is feasible and worthwhile to add it to Oberon+ is subject to further investigations. In any case a simple work-around is to pass the required objects as VAR or IN parameters to the nested procedures.
In addition to the above, Oberon+ adds the following:
Pending features of Oberon+:
Features in evaluation: