Simula is the language where classes, objects and inheritance first appeared together. It was designed at the Norwegian Computing Center (Norsk Regnesentral) in Oslo by Ole-Johan Dahl and Kristen Nygaard, first as Simula I, a simulation language conceived around 1962, and then as the general-purpose Simula 67. If you want to know how Simula 67 introduced object-oriented programming, the story is really about two researchers trying to describe ships, queues and factories in code.
Origins in Oslo
Kristen Nygaard worked on operations research and needed a way to describe complex systems, such as people and goods moving through a port, for discrete event simulation. Ole-Johan Dahl was an experienced programmer and compiler writer. Together they designed Simula I as an extension of ALGOL 60. Its first compiler ran on a UNIVAC 1107 around 1965, and the language found users in Scandinavia and beyond.
Simula I worked, but its concepts were tied to simulation. Dahl and Nygaard saw that the underlying idea, a block of data and procedures that could be created many times and run with its own life, was useful for any kind of program. They generalised it and presented Simula 67 at an IFIP working conference in 1967. A Common Base definition followed in 1968, and compilers appeared for machines from Control Data, UNIVAC, IBM and DEC.
How Simula 67 introduced object-oriented programming
Simula 67 introduced, in one coherent language, the ideas that most programmers now take for granted:
- Classes and objects. A
classdeclaration describes a pattern;newcreates an object (an instance) with its own data. - Subclasses and inheritance. Prefixing one class with another (
Shape Class Circle) makes Circle inherit everything from Shape and add to it. - Virtual procedures. A procedure declared
virtualcan be redefined in a subclass, and the call is resolved at run time. This is dynamic dispatch, the core of polymorphism. - References. Typed object references (
ref(Shape)) with the reference assignment operator:-, plus automatic garbage collection. - Coroutines. Objects could pause and resume with
detachandresume, which made simulation of parallel activities natural.
The standard library class SIMULATION built event scheduling on top of these features, so simulation became just one application of a general mechanism. The term "object-oriented programming" itself came later, from Alan Kay, but the mechanism was already in Simula.
A short Simula 67 example
Begin
Class Shape;
Virtual: Procedure Describe;
Begin
End;
Shape Class Circle(R); Real R;
Begin
Procedure Describe;
OutText("Circle");
End;
Ref(Shape) S;
S :- New Circle(2.0);
S.Describe;
OutImage;
End;
The variable S is declared as a reference to Shape, yet the call runs Circle's version of Describe. That single line shows inheritance and dynamic dispatch working in 1967.
How Simula was used
Simula's main users were in simulation and operations research, in universities and in industry, especially in Scandinavia, Germany and the UK. It was also a teaching language in several European universities through the 1970s and 1980s. Its compilers were not widely available on the cheapest machines, which limited its commercial spread, but its readers were often the people who would design the next generation of languages.
Influence and legacy
Two famous lines of influence start here:
- Smalltalk. Alan Kay studied Simula in the late 1960s, and its objects shaped his thinking at Xerox PARC.
- C++. Bjarne Stroustrup used Simula for his PhD work at Cambridge. He liked its structure but not its speed, and in 1979 began "C with Classes" at Bell Labs to combine Simula's classes with C's efficiency.
Through C++ and Smalltalk, Simula's ideas reached Object Pascal, Eiffel, Java, C# and nearly every mainstream language since. Nygaard also co-designed BETA, a direct successor. Dahl and Nygaard received the ACM Turing Award for 2001 and the IEEE John von Neumann Medal in 2002; both died in 2002, within weeks of each other.
Is Simula still used today?
Practically no new software is written in Simula, and it counts as a historical language. GNU Cim, a compiler that translates Simula to C, still works for anyone who wants to experiment. The real answer to how Simula 67 introduced object-oriented programming is visible every time someone writes class, new or virtual in a modern language.
Frequently asked questions
Was Simula the first object-oriented programming language?
Simula 67 is generally recognised as the first language with classes, objects, inheritance and dynamic dispatch together. Earlier systems, such as Ivan Sutherland's Sketchpad (1963), had object-like ideas, but not as a programming language. Smalltalk, which came later, popularised the term "object-oriented".
What is the difference between Simula I and Simula 67?
Simula I was a special-purpose language for discrete event simulation, built on ALGOL 60. Simula 67 generalised its process concept into classes, subclasses and virtual procedures, making it a general-purpose language. Simulation became a library class rather than a built-in feature.
Why did Bjarne Stroustrup base C++ on Simula?
While doing his PhD at Cambridge, Stroustrup found Simula's classes excellent for organising a large program, but the implementation was too slow for his needs. C++ began as an attempt to keep Simula's program structure while running at the speed of C.







