Oberon (programming language)
   HOME

TheInfoList



OR:

Oberon is a general-purpose
programming language A programming language is a system of notation for writing computer programs. Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
first published in 1987 by
Niklaus Wirth Niklaus Emil Wirth ( IPA: ) (15 February 1934 – 1 January 2024) was a Swiss computer scientist. He designed several programming languages, including Pascal, and pioneered several classic topics in software engineering. In 1984, he won the Tu ...
and the latest member of the Wirthian family of ALGOL-like languages ( Euler,
ALGOL W ALGOL W is a programming language. It is based on a proposal for ALGOL X by Niklaus Wirth and Tony Hoare as a successor to ALGOL 60. ALGOL W is a relatively simple upgrade of the original ALGOL 60, adding string, bitstring, complex number a ...
, Pascal,
Modula The Modula programming language is a descendant of the Pascal language. It was developed in Switzerland, at ETH Zurich, in the mid-1970s by Niklaus Wirth, the same person who designed Pascal. The main innovation of Modula over Pascal is a mo ...
, and Modula-2). Oberon was the result of a concentrated effort to increase the power of Modula-2, the direct successor of Pascal, and simultaneously to reduce its complexity. Its principal new feature is the concept of data type extension of record types. It permits constructing new data types on the basis of existing ones and to relate them, deviating from the dogma of strict static typing of data. Type extension is Wirth's way of inheritance reflecting the viewpoint of the parent site. Oberon was developed as part of the implementation of an
operating system An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs. Time-sharing operating systems scheduler (computing), schedule tasks for ...
, also named Oberon at ETH Zurich in
Switzerland Switzerland, officially the Swiss Confederation, is a landlocked country located in west-central Europe. It is bordered by Italy to the south, France to the west, Germany to the north, and Austria and Liechtenstein to the east. Switzerland ...
. The name was inspired both by the Voyager space probe's pictures of the moon of the planet
Uranus Uranus is the seventh planet from the Sun. It is a gaseous cyan-coloured ice giant. Most of the planet is made of water, ammonia, and methane in a Supercritical fluid, supercritical phase of matter, which astronomy calls "ice" or Volatile ( ...
, named Oberon, and because Oberon is famous as the king of the elves. Oberon was maintained by Wirth and the latest Project Oberon compiler update is dated 6 March 2020.


Design

Oberon is designed with a motto attributed to Albert Einstein in mind: "Make things as simple as possible, but not simpler." The principal guideline was to concentrate on features that are basic and essential and to omit ephemeral issues. Another factor was recognition of the growth of complexity in languages such as C++ and Ada. In contrast to these, Oberon emphasizes the use of the
library A library is a collection of Book, books, and possibly other Document, materials and Media (communication), media, that is accessible for use by its members and members of allied institutions. Libraries provide physical (hard copies) or electron ...
concept to extend the language. Enumeration and subrange types, which were present in Modula-2, were omitted, and set types are limited to sets of integers. All imported items must be qualified by the name of the module where they are declared. Low-level facilities are highlighted by only allowing them to be used in a module which includes the identifier SYSTEM in its import list. Strict type checking, even across modules, and
index checking In computer programming, bounds checking is any method of detecting whether a variable is within some bounds before it is used. It is usually used to ensure that a number fits into a given type (range checking), or that a variable being used as ...
at runtime,
null pointer In computing, a null pointer (sometimes shortened to nullptr or null) or null reference is a value saved for indicating that the Pointer (computer programming), pointer or reference (computer science), reference does not refer to a valid Object (c ...
checking, and the safe type extension concept largely allow programming to rely on the language rules alone. The intent of this strategy was to produce a language that is easier to learn, simpler to implement, and very efficient. Oberon compilers have been viewed as compact and fast, while providing code quality comparable to commercial compilers.


Characteristics

Features characterizing the Oberon language include: * Case sensitive syntax with uppercase keywords * Type-extension with type test * Modules and separate compiling * String operations * Isolating unsafe code * Support for system programming


Object orientation

Oberon supports extension of record types for the construction of abstractions and heterogeneous structures. In contrast to the later dialects, Oberon-2 and Active Oberon, the original Oberon lacks a dispatch mechanism as a language feature but has it as a programming technique or design pattern. This gives great flexibility in OOP. In the Oberon operating system, two programming techniques are used together for the dispatch call: Method suite and Message handler.


Method suite

In this technique, a table of procedure variables is defined and a global variable of this type is declared in the extended module and assigned back in the generic module: MODULE Figures; ''(* Abstract module *)'' TYPE Figure* = POINTER TO FigureDesc; Interface* = POINTER TO InterfaceDesc; InterfaceDesc* = RECORD draw* : PROCEDURE (f : Figure); clear* : PROCEDURE (f : Figure); mark* : PROCEDURE (f : Figure); move* : PROCEDURE (f : Figure; dx, dy : INTEGER); END; FigureDesc* = RECORD if : Interface; END; PROCEDURE Init* (f : Figure; if : Interface); BEGIN f.if := if END Init; PROCEDURE Draw* (f : Figure); BEGIN f.if.draw(f) END Draw; ''(* Other procedures here *)'' END Figures. We extend the generic type Figure to a specific shape: MODULE Rectangles; IMPORT Figures; TYPE Rectangle* = POINTER TO RectangleDesc; RectangleDesc* = RECORD (Figures.FigureDesc) x, y, w, h : INTEGER; END; VAR if : Figures.Interface; PROCEDURE New* (VAR r : Rectangle); BEGIN NEW(r); Figures.Init(r, if) END New; PROCEDURE Draw* (f : Figure); VAR r : Rectangle; BEGIN r := f(Rectangle); ''(* f AS Rectangle *)'' ''(* ... *)'' END Draw; (* Other procedures here *) BEGIN ''(* Module initialisation *)'' NEW(if); if.draw := Draw; if.clear := Clear; if.mark := Mark; if.move := Move END Rectangles. Dynamic dispatch is only done via procedures in Figures module that is the generic module.


Message handler

This technique consists of replacing the set of methods with a single procedure, which discriminates among the various methods: MODULE Figures; ''(* Abstract module *)'' TYPE Figure* = POINTER TO FigureDesc; Message* = RECORD END; DrawMsg* = RECORD (Message) END; ClearMsg* = RECORD (Message) END; MarkMsg* = RECORD (Message) END; MoveMsg* = RECORD (Message) dx*, dy* : INTEGER END; Handler* = PROCEDURE (f : Figure; VAR msg : Message); FigureDesc* = RECORD ''(* Abstract *)'' handle : Handler; END; PROCEDURE Handle* (f : Figure; VAR msg : Message); BEGIN f.handle(f, msg) END Handle; PROCEDURE Init* (f : Figure; handle : Handler); BEGIN f.handle := handle END Init; END Figures. We extend the generic type Figure to a specific shape: MODULE Rectangles; IMPORT Figures; TYPE Rectangle* = POINTER TO RectangleDesc; RectangleDesc* = RECORD (Figures.FigureDesc) x, y, w, h : INTEGER; END; PROCEDURE Draw* (r : Rectangle); BEGIN ''(* ... *)'' END Draw; ''(* Other procedures here *)'' PROCEDURE Handle* (f: Figure; VAR msg: Figures.Message); VAR r : Rectangle; BEGIN r := f(Rectangle); IF msg IS Figures.DrawMsg THEN Draw(r) ELSIF msg IS Figures.MarkMsg THEN Mark(r) ELSIF msg IS Figures.MoveMsg THEN Move(r, msg(Figures.MoveMsg).dx, msg(Figures.MoveMsg).dy) ELSE (* ignore *) END END Handle; PROCEDURE New* (VAR r : Rectangle); BEGIN NEW(r); Figures.Init(r, Handle) END New; END Rectangles. In the Oberon operating system both of these techniques are used for dynamic dispatch. The first one is used for a known set of methods; the second is used for any new methods declared in the extension module. For example, if the extension module Rectangles were to implement a new Rotate() procedure, within the Figures module it could only be called via a message handler.


Implementations and variants


Oberon

No-cost implementations of Oberon (the language) and Oberon (the operating system) can be found on the Internet (several are from ETHZ itself).


Oberon-2

A few changes were made to the first released specification. For example,
object-oriented programming Object-oriented programming (OOP) is a programming paradigm based on the concept of '' objects''. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and impl ...
(OOP) features were added, the FOR loop was reinstated. The result was '' Oberon-2''. One release, named '' Native Oberon'' which includes an operating system, and can directly boot on IBM PC compatible class hardware. A .NET implementation of Oberon with some added minor .NET-related extensions was also developed at ETHZ. In 1993, an ETHZ university spin-off company brought a dialect of Oberon-2 to the market named ''Oberon-L''. In 1997, it was renamed '' Component Pascal''. Oberon-2 compilers developed by ETH include versions for
Microsoft Windows Windows is a Product lining, product line of Proprietary software, proprietary graphical user interface, graphical operating systems developed and marketed by Microsoft. It is grouped into families and subfamilies that cater to particular sec ...
,
Linux Linux ( ) is a family of open source Unix-like operating systems based on the Linux kernel, an kernel (operating system), operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically package manager, pac ...
, Solaris, and classic Mac OS. Implementations from other sources exist for some other operating systems, including Atari TOS and
AmigaOS AmigaOS is a family of proprietary native operating systems of the Amiga and AmigaOne personal computers. It was developed first by Commodore International and introduced with the launch of the first Amiga, the Amiga 1000, in 1985. Early versions ...
. There is an Oberon-2 Lex scanner and Yacc parser by Stephen J Bevan of Manchester University, UK, based on the one in the Mössenböck and Wirth reference. It is at version 1.4. Other compilers include Oxford Oberon-2, which also understands Oberon-07, and Vishap Oberon. The latter is based on Josef Templ's Oberon to C language source-to-source compiler (transpiler) named Ofront, which in turn is based on the OP2 Compiler developed by Regis Crelier at ETHZ.


Oberon-07

Oberon-07, defined by Niklaus Wirth in 2007 and revised in 2008, 2011, 2013, 2014, 2015, and 2016 is based on the original version of Oberon rather than Oberon-2. The main changes are: explicit numeric conversion functions (e.g., FLOOR and FLT) must be used; the WITH, LOOP and EXIT statements were omitted; WHILE statements were extended; CASE statements can be used for type extension tests; RETURN statements can only be connected to the end of a function; imported variables and structured value parameters are read-only; and, arrays can be assigned without using COPY. Oberon-07 compilers have been developed for use with many different computer systems. Wirth's compiler targets a reduced instruction set computer (RISC) processor of his own design that was used to implement the 2013 version of the Project Oberon operating system on a Xilinx field-programmable gate array (FPGA) Spartan-3 board. Ports of the RISC processor to FPGA Spartan-6, Spartan-7, Artix-7 and a RISC emulator for Windows (compilable on Linux and macOS, and binaries available for Windows) also exist
OBNC
compiles via C and can be used on any Portable Operating System Interface ( POSIX) compatible operating system. The commercia
Astrobe
implementation targets STM ARM Cortex-M0, M3, M4, M7 and Raspberry Pi RP2040 and RP2350 microcontrollers. Th
Patchouli
compiler produces 64-bit Windows binaries
Oberon-07M
produces 32-bit Windows binaries and implements revision 2008 of the language
Akron's
produces binaries for both Windows and Linux

translates Oberon to
JavaScript JavaScript (), often abbreviated as JS, is a programming language and core technology of the World Wide Web, alongside HTML and CSS. Ninety-nine percent of websites use JavaScript on the client side for webpage behavior. Web browsers have ...
. There i
online IDE for Oberonoberonc
is an implementation for the
Java virtual machine A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode. The JVM is detailed by a specification that formally descr ...
.


Active Oberon

Active Oberon is yet another variant of Oberon, which adds objects (with object-centered access protection and local activity control), system-guarded assertions, preemptive priority scheduling and a changed syntax for methods (named '' type-bound procedures'' in Oberon vocabulary). Objects may be active, which means that they may be threads or processes. Further, Active Oberon has a way to implement operators (including overloading), an advanced syntax for using arrays (se
OberonX language extensions
and Proceedings of the 7th Joint Modular Languages Conference 2006 Oxford, UK), and knows about namespaces. The operating system A2 (formerly ''Active Object System'' (AOS), then ''Bluebottle''), especially the kernel, synchronizes and coordinates different active objects. ETHZ has released Active Oberon which supports active objects, and the operating systems based thereon (Active Object System (AOS), Bluebottle, A2), and environment (JDK, HTTP, FTP, etc.) for the language. As with many prior designs from ETHZ, versions of both are available for download on the Internet. As of 2003, supported
central processing unit A central processing unit (CPU), also called a central processor, main processor, or just processor, is the primary Processor (computing), processor in a given computer. Its electronic circuitry executes Instruction (computing), instructions ...
s (CPUs) include single and dual core x86, and StrongARM.


Related languages

Development continued on languages in this family. A further extension of Oberon-2 was originally named Oberon/L but later renamed to Component Pascal (CP). CP was developed for Windows and classic Mac OS by Oberon microsystems, a commercial spin-off company from ETHZ, and for .NET by Queensland University of Technology. Further, the languages ''Lagoona'' and '' Obliq'' carry Oberon methods into specialized areas. Later .NET development efforts at ETHZ focused on a new language named Zonnon. This includes the features of Oberon and restores some from Pascal (enumerated types, built-in IO) but has some syntactic differences. Other features include support for active objects, operator overloading, and exception handling. Oberon-V (originally named Seneca, after Seneca the Younger) is a descendant of Oberon designed for numerical applications on
supercomputer A supercomputer is a type of computer with a high level of performance as compared to a general-purpose computer. The performance of a supercomputer is commonly measured in floating-point operations per second (FLOPS) instead of million instruc ...
s, especially vector or pipelined architectures. It includes array constructors and an ALL statement.


See also

* Oberon (operating system) * A2 (operating system) * Oberon on Wikibooks


Resources


General

*
Official website (latest available copy at archive org)
' at ETH-Zürich *
Niklaus Wirth's Oberon Page
' at ETH-Zürich *

' at SSW, Linz *
Oberon: The Programming Language
' at Ulm *
Project Oberon, The Design of an Operating System and a Compiler
', book in PDF by Niklaus Wirth and Jürg Gutknecht, 2005 Edition *

' *
Astrobe
' ARM Oberon-07 Development System *

' with source code upward-compatible 64 bit addressing *

' for OpenVMS Alpha *
Oxford Oberon-2 Compiler
' and it
User Manual
*
Free Oberon-07 IDE
' Free Oberon-07 IDE for Windows, Macintosh, and Linux with syntax colouring, semantic navigation and source code debugger *
Oberon article by Joseph Templ
' in the January 1994 issue of Dr.Dobbs


Evolution of Oberon

*
Modula-2 and Oberon
' Wirth (2005) *
The Programming Language Oberon
' Wirth, (1988/90) *
The Programming Language Oberon (Oberon-7, Revised Oberon)
' Wirth, (2016, most current language report) *
Differences between Oberon-07 and Oberon
' Wirth (2011) *
The Programming Language Oberon-2
' H. Mössenböck, N. Wirth, Institut für Computersysteme, ETH Zürich, January 1992 *
Differences between Oberon and Oberon-2
' Mössenböck and Wirth (1991) *
What's New in Component Pascal
' (Changes from Oberon-2 to CP), Pfister (2001)


References

{{DEFAULTSORT:Oberon (Programming Language) Modula programming language family Class-based programming languages Procedural programming languages Oberon programming language family Systems programming languages Programming languages created in 1986 Statically typed programming languages ja:Oberon