Introducing Niklaus Wirth's minimalist spawn of Modula-2 and other distinguished forebears.
Niklaus Wirth developed Oberon at the Institut f¼r Informatik in Zurich, Switzerland. Wirth explains its gestation: "Oberon evolved from a project whose goal was the design of a modern, flexible and efficient operating system for a single-user workstation. The OS was initially designed in Modula-2, but Wirth felt that because Modula-2 allowed the use of variant record types, garbage collection would be difficult; consequently, he decided to design a new language that would provide other methods for extending record types.
Wirth also wished to experiment with a minimalist approach to language design that emphasized mathematical purity. As a result, Oberon evolved from Modula-2 chiefly by subtracting features from Modula-2, although some new features were added. Some of the subtracted features include variant records, opaque data types, enumeration types, subrange types, reserved words CARDINAL and WITH, local modules.
Wirth also changed the following Modula-2 features: Pointers must be bound to a record or an array type. An array index must be integers, beginning at 0. Qualification of imported modules is required. The SYSTEM module was dropped in favor of the data types ADDRESS and WORD, and concurrency is not supported.
Finally, Wirth introduced two new features: multidimensional open arrays and extended (extensible) record types.
Although Oberon may not reach the same levels of commercial acceptance as Wirth's Pascal and Modula-2, it has already influenced designers of subsequent languages. Modula-3, a joint project of the Digital Systems Research Center and the Olivetti Research Center, was designed to provide OO extensions to Modula-2 as well as support for threads, exceptions and garbage collection. Modula 3 is based on Modula-2+ and incorporates features of the Mesa and Cedar languages.
The authors freely admit that their intention was not so much to define new concepts as to take the best of Mesa, Modula-2, Cedar and Modula-2+ and incorporate them in a new language. One of their main goals was to provide safety from unchecked runtime errors, such as might occur when a record with pointers referencing it is freed, leaving the pointers pointing to garbage. Another source of runtime errors in Modula-2 that Modula-3 addresses is the use of variant records to circumvent type-checking.
—Warren Keuffel, "Whither Modula-2?, Tools of the Trade
Speaking Softly
Fifteen years ago, Smalltalk made it big.
When programmers begin to learn OO programming, they must first pick a language to learn with. An obvious choice for many established programmers is a hybrid language, such as C++ or Object Pascal, which adds OO facilities to an existing language. A programmer can then begin with a sense of familiarity, moving into OO programming gradually because old language skills can be used while learning new ones.
Is that the best approach? I once thought so, but I've since changed my mind. Hybrid languages suffer from several faults. To begin with, they don't feel completely object-oriented. Built-in types from the base language (int and CHAR, for example) aren't implemented in an OO manner; this often causes frustration when you try to build generic object containers and structures. In addition, none of the hybrid languages provides a significant, well-documented library of classes the programmer can study. I've come to the conclusion that Smalltalk is the best language to use when learning OO programming. Its interactive, graphic environment is an excellent tool for learning easily and enjoyably. In addition, Smalltalk is entirely object-oriented. Every single type in Smalltalk, from numbers to containers, is an object. This "pure approach helps the programmer better understand how complex systems can be built from objects.
—Scott Robert Ladd, "Chatting about Smalltalk, Objectively Speaking
Software Development was known as Computer Language from 1984 to 1993. All selections from December 1989. Compiled by Laurie O'Connell.