Simula
In 1961 at the Norwegian Computing Center, Kristen Nygaard initiated the development of a new programming language intended for discrete event simulation. This project, which would become Simula, marked the beginning of a close collaboration with Ole-Johan Dahl, who joined him in 1962. The two researchers shared experience at the Norwegian Defence Research Establishment, but their backgrounds differed: Nygaard had focused on operations research and Monte Carlo simulations, while Dahl had developed system software and programming languages.
The development of Simula responded to the concrete need for appropriate tools to simulate complex systems such as neural networks, communication systems, or traffic flows. However, programming such simulations in machine language or Fortran proved difficult. What was missing was a coherent set of concepts for understanding and describing the structure and interactions in these complex systems.
The first version of the language, Simula I, was developed between 1962 and 1964 under contract with UNIVAC. The designers chose to base their language on ALGOL 60, particularly for its block structure and programming safety. The major innovation of Simula I lay in the introduction of the concept of processes, which represented entities capable of executing actions in quasi-parallel while carrying their own data. These processes could interact and be programmed to simulate the behavior of real-world objects.
The development of Simula I required a new memory management system based on linked lists, developed by Dahl, freeing itself from the “last in, first out” (LIFO) constraint of ALGOL 60 and allowing processes to exist independently of the block call structure. The compiler was operational by the end of 1964, and the language achieved some success in the simulation community. It was notably used on UNIVAC 1100, Burroughs B5500, and URAL 16 computers. However, Dahl and Nygaard realized that the concepts developed for Simula I could be useful beyond simulation, for general programming and system design.
This reflection led to the development of Simula 67, a complete redesign of the language integrating the concepts of class and inheritance. The inspiration came partly from Tony Hoare’s work on record manipulation, presented at a NATO summer school in 1966. The conceptual breakthrough occurred in January 1967 with the idea of “class prefixing”, meaning that one class could prefix another, thus creating an inheritance relationship where the second inherits the properties of the first.
Simula 67 introduced fundamental concepts that would have a lasting influence on programming: objects as data structures with their associated operators, classes as templates for creating these objects, inheritance for specializing classes, and virtual procedures allowing the modification of object behavior in subclasses. The language distinguished the internal view of an object (its variables and constants) from its external view (the procedures accessible remotely).
The standardization of Simula 67 took place at the Simula Common Base Conference in June 1967, which established the Simula Standards Group to manage the language’s evolution. The first installations appeared as early as 1969 on Control Data computers, followed by versions for UNIVAC and IBM. However, the language’s dissemination was hindered by the high prices demanded by the Norwegian Computing Center, under pressure from the Norwegian Research Council, which considered that a programming language had only a three-to-five-year lifespan.
Alan Kay and his team at Xerox PARC drew inspiration from Simula to create Smalltalk, which popularized object-oriented programming in the 1970s. Simula’s concepts influenced the development of graphical interfaces, first on the Macintosh and then in Windows. The language inspired numerous successors, such as C++ by Bjarne Stroustrup, which widely disseminated object-oriented programming, Eiffel by Bertrand Meyer, and more recently Java.
The success of Simula’s ideas is partly explained by their origin in simulation modeling, where design in terms of cooperating objects is natural. The generality of the approach allowed its application to numerous aspects of software development. The concepts introduced by Dahl and Nygaard have become so ubiquitous.