Niklaus Wirth 2026-11-05
Niklaus Wirth designed Pascal, Modula-2 and Oberon, connecting language design with compiler and system construction. His project account traces their development through implementations, teaching and workstation systems rather than presenting syntax in isolation.[ref]
Oberon illustrates his preference for a small explicit language definition. Its report describes type extension of records, allowing a new record type to build on an existing one. A base-typed pointer can refer to an extended record, while access to extension-specific fields requires an appropriate type test or guard. The language's value and VAR parameters also specify whether a call receives a value or access to the caller's variable.[ref]
Record type 2026-11-05
A record type is a data type whose values contain a specified collection of named fields, each with its own type. A record describing a point might have numeric fields x and y and a text field label. Selecting point.x identifies a component by its field name. Oberon defines records in this way and permits record extension by additional fields.[ref]
The logical grouping is distinct from its byte layout. An implementation may insert padding to satisfy memory alignment; for example, a small integer field followed by a larger one need not occupy exactly the sum of their payload sizes. In C programming language, the corresponding aggregate is a structure, with field ordering and padding governed by the language's representation rules.[ref]
Reference parameter Created 2026-10-31 Updated 2026-11-05
A reference parameter designates the caller's actual storage. Assigning through it can change what the caller subsequently observes; passing a complete independent copy would instead change only the local copy. A value parameter containing an object reference is another case: copying that reference does not copy the referenced software object.
In Oberon, a variable parameter is marked VAR and stands for the supplied actual variable. For example, a procedure accepting VAR x: INTEGER can increment the caller's integer through x.[ref]
A read-only algorithm can use a reference parameter to avoid copying a large array, while its formal specification still prohibits writes. Reference aliasing remains relevant: two parameters can designate overlapping storage. A proof of algorithm correctness must account for the actual aliasing rules rather than assume that different parameter names denote independent values.
Type extension 2026-11-05
Type extension constructs a new data type from a base data type while retaining a specified relationship with it. In Oberon, a record type can extend another record type by adding fields while preserving its base fields. The language also relates corresponding pointer types and supplies type guards for accessing an extended value.[ref]
For example, a base Point can contain coordinates x,y; an extending ColoredPoint retains those coordinates and adds color. Code using a permitted base interface can operate on the inherited coordinates, while access to color requires knowledge of the extension. This is a declared relationship in the type system, rather than an inference that two unrelated record types happen to have similarly named fields.