The approach to concurrency described in this chapter evolved from a presentation at TOOLS EUROPE [M 1990a] and was revised in [M 1993c], from which some of the material in this chapter (examples in particular) was derived. It is now known as SCOOP for "Simple Concurrent Object-Oriented Programming". John Potter and Ghinwa Jalloul have developed a variant that includes an explicit hold instruction [Jalloul 1991, 1994]. Wait by necessity was introduced by Denis Caromel [Caromel 1989, 1993].
A good textbook on the main traditional approaches to concurrency is [Ben Ari 1990]. Original references include: on semaphores, [Dijkstra 1968a], which also introduced the "dining philosophers" problem; on monitors, [Hoare 1978]; on path expressions, [Campbell 1974]. The original CSP model was described in [Hoare 1978]; the book [Hoare 1985] presents a revised model with special emphasis on its mathematical properties. Occam2 is described in [Inmos 1988]. A CSP and Occam archive is maintained at http://www.comlab.ox.ac.uk/archive/csp.html. CCS (Communicating Concurrent Systems) [Milner 1989] is another influential mathematically-based model. Although not discussed elsewhere in this chapter, Carriero's and Gelernter's Linda method and tool [Carriero 1990] is a must know for anyone interested in concurrency.
A special issue of the Communications of the ACM [M 1993] presents a number of important approaches to concurrent object-oriented programming, originally drawn from concurrency papers at various TOOLS conferences.
Another collection of papers that appeared at about the same time is [Agha 1993]. An earlier collective book edited by Yonezawa and Tokoro [Yonezawa 1987] served as impetus for much of the work in the field and is still good reading. Other surveys include a thesis, [Papathomas 1992], and an article, [Wyatt 1992].
Hewitt's and Agha's actors model, which predates the object-oriented renaissance and comes from a somewhat different background, has influenced many concurrent O-O approaches; it is described in an article [Agha 1990] and a book [Agha 1986]. Actors are computational agents similar to active objects, each with a mail address and a behavior. An actor communicates with others through messages sent to their mail addresses; to achieve asynchronous communication, the messages are buffered. An actor processes messages through functions and by providing "replacement behaviors" to be used in lieu of the actor's earlier behavior after a certain message has been processed.
One of the earliest and most thoroughly explored parallel object-oriented languages is POOL [America 1989]; POOL uses a notion of active object, which was found to raise problems when combined with inheritance. For that reason inheritance was introduced into the language only after a detailed study which led to the separation of inheritance and subtyping mechanisms. The design of POOL is also notable for having shown, from the start, a strong concern for formal language specification.
Much of the important work in concurrent O-O language has come from Japan. [Yonezawa 1987], already cited, contains the description of several influential Japanese developments, such as ABCL/1 [Yonezawa 1987a]. MUSE, an object-oriented operating system developed at the Sony Computer Science Laboratory, was presented by Tokoro and his colleagues at TOOLS EUROPE 1989 [Yokote 1989]. The term "inheritance anomaly" was introduced by Matsuoka and Yonezawa [Matsuoka 1993], and further papers by Matsuoka and collaborators which propose various remedies.
Work on distributed system has been particularly active in France, with the CHORUS operating system, of which [Lea 1993] describes an object-oriented extension; the GUIDE language and system of Krakowiak et al. [Balter 1991]; and the SOS system of Shapiro et al. [Shapiro 1989]. In the area of programming massively parallel architectures, primarily for scientific applications, Jean-Marc Jézéquel has developed the ÉPÉE system [Jézéquel 1992, 1996 (chapter 9), Guidec 1996].
Also influential has been the work done by Nierstrasz and his colleagues at the University of Genève around the Hybrid language [Nierstrasz 1992] [Papathomas 1992], which does not have two categories of objects (active and passive) but relies instead on the notion of thread of control, called activity. The basic communication mechanism is remote procedure call, either synchronous or asynchronous.
Other important projects include DRAGOON [Atkinson 1991], which, like the mechanism of this chapter, uses preconditions and postconditions to express synchronization, and pSather [Feldman 1993], based on the notion of thread and a predefined MONITOR class.
Many other developments would need to be added to this list. For more complete surveys, see the surveys mentioned at the beginning of this section. The proceedings of workshops regularly held at the ECOOP and OOPSLA conferences, such as [Agha 1988, Agha 1991, Tokoro 1992], describe a variety of ongoing research projects and are precious to anyone who wants to find out what problems researchers consider most pressing.