n this talk we will describe the approach to concurrency in SIMULA 67, the very first object-oriented language and the further development of this in the Beta language. We will also discuss what we consider the weaknesses of SIMULA and Beta with respect to concurrency and present current work to improve this.
SIMULA 67 had most of the essential language concepts now available in mainstream object-oriented languages. The SIMULA approach to the modeling of concurrent activities has, however, not caught on. Objects in SIMULA are active in the sense that an object is a coroutine – the head of a thread. SIMULA was originally designed to model and simulate activities in the real world. For this reason it was mandatory to be able to model concurrent activities.
Beta was designed as a successor to SIMULA and the approach to active objects and concurrency was further developed. Concurrent object-oriented programming in Beta is based on semaphores, coroutines, and the ability to define high-level concurrency abstractions like monitors, and rendezvous-based communication, and their associated schedulers. The coroutine mechanism of SIMULA has been generalized into the notions of concurrent and alternating objects Alternating objects of a concurrent object may be used to represent cooperative threads for eventual blocking communication with the concurrent object. It is thus an alternative to asynchronous messages and guarded commands. Beta, like SIMULA, was designed as a language for modeling as well as programming, and we describe how this has had an impact on the design of the language.
Although Beta supports the definition of high-level concurrency abstractions, the use of these rely on the discipline of the programmer, as is the case for Java and other mainstream object-oriented languages. We present the notion of subpattern (including subclass) restrictions as a mechanism for defining safe concurrency abstractions as an alternative to rely on discipline. Subpattern restrictions have been implemented in a new experimental version of Beta.