(This article has been submitted for publication. Copyright may be transferred without further notice and this version may no longer be accessible.)
Günter Dotzel ModulaWare La Chanenche F-04340 Meolans Revel (France) mailto:firstname.lastname@example.org Wojtek Skulski Chemistry Department and Nuclear Structure Research Laboratory University of Rochester Rochester, NY 14623, USA mailto:email@example.com
Wojtek Skulski Chemistry Department and Nuclear Structure Research Laboratory University of Rochester Rochester, NY 14623, USA mailto:firstname.lastname@example.org
Oberon is a highly efficient, general-purpose programming language, descendant of Pascal and Modula-2. It is simpler yet more powerful than its predecessors. Oberon programs are structured, modular and type-safe. Object-oriented programming is supported through the type extension mech- anism, single inheritance, procedural variables, type-bound methods, data hiding and encapsulation, and garbage collection. Both standalone and integrated Oberon compilers are available for most types of popular computer platforms.
1. Oberon: the new Pascal Oberon  is a modern, general-purpose programming language which has all the essential features of other popular object-oriented programming languages, such as classes, inheritance, methods and messages. At the same time, "Oberon" is also the name of an extensible operating system  written in Oberon programming language. Both, the language and the system, were developed by Prof. Niklaus Wirth and collaborators at Eidgenössische Technische Hochschule (ETH) in Züurich. As a legitimate heir in the Pascal family, designed by the same person who also designed Pascal and Modula-2, Oberon is both an old and new programming language. It relies on three decades of experience and development. At the same time, Oberon is simpler yet more powerful than its predecessors Pascal and Modula-2. The quotation from Einstein "make it as simple as possible, but not simpler" became the motto of the Oberon project. This design goal was achieved by eliminating many superfluous Modula-2 features, such as nested modules, subrange types, enumerations, variant records and a selective import statement. Module definition and implementation parts have been merged into one text file. In order to support object-oriented programming (OOP), only very few new terms were added. Besides garbage collection, the most important new language feature was type extension. Somewhat surprisingly, the OOP methodology could be fully supported as a special case of more general programming techniques offered by the Oberon language. There was little need to introduce "classes", "inheritance", "methods", etc, as special OOP terms, in addition to those already existing. In a sense, Oberon became the world's smallest, yet fully functional OOP language. The simplicity, gained by purging the unnecessary while adding only as few new features as possible, resulted in a language which is easy to learn, simple to implement, and also very efficient. Last, but not least, it is a pleasure to work with. In this article we will try to convey this "spirit of Oberon" to the reader. Perhaps the most important news is that the traditional procedural style is fully supported along with OOP. One can thus write an entirely traditional program in Oberon. This translates into a flat learning curve. Migration from Fortran is almost automatic, at least for those who arrange their Fortran programs neatly. Also, Pascal or Modula-2 programmers can be up and writing Oberon programs in just a couple of hours, after browsing through the compact language report and noting new features of the language. Naturally, learning the OOP techniques will take somewhat longer, but this is not due to the complexity of the language itself, but rather due to the complexity of the subject. As far as the language goes, there is almost nothing to be learned the hard way. One of the outstanding Oberon qualities is the mandatory modular structure of Oberon programs, a feature retained from Modula-2. A simple example will illustrate the point: