In the practical world of computing, it is rather uncommon that a program, once it performs correctly and satisfactorily, remains unchanged forever.
Oberon is a general purpose language from the Pascal/Modula/Oberon family, created around 1988 by Niklaus Wirth and Jurg Gutknecht at the ETH Zurich. The language was developed in combination with the Oberon operating system, establishing a single-user workstation type of computer.
Since the creation of Oberon, the system has been enhanced and implemented in several variants and on various platforms. After Wirth retired from teaching at the ETH institute, he resumed working on the original Oberon and related hardware, not to add features and complexity, but to refine and simplify Oberon as much as possible.
The resulting system, Project Oberon 2013, including the RISC5 processor, is a masterpiece of system design, reliability, regularity and responsiveness even on simulated hardware which is usually slow compared to "native" code.
- type-safe language, also across module boundaries
- hierarchical (cycle-free) modules. Modules are the compilation units, with controlled exports
- record type extension, the mother of inheritance, enabling various object/message paradigms
- assignable PROCEDURE types, enabling callback schemes and object orientation
- SYSTEM pseudo module for low-level access by (non-portable) clients: no assembler needed
- the Oberon-07 language report is only 17 pages
- system managed non-overlapping screen viewers responding to user input
- full garbage collection, including cyclic structures, with user command granularity
- separate files and directory handling, unregistered scratchpad files
- multiple access on single files, garbage collection of unregistered files
- dynamically loaded and linked modules, unloading possible depending on reference count
- background tasks without multi-threading (user commands run to completion)
- compiler error reports pointing to text position
- runtime error traps (ASSERTs, array bounds, nil pointers, ...) with text position reporting
- native UI by parameterless procedures, which are directly invokable from any text on the screen