20 CHAPTER 2. THE ARCHITECTURAL MODEL
they are polymorphic,) and that they all follow the same message passing
interface.
The word concurrency refers to sets of events which happen simulta-
neously. The real world is concurrent, and consists of a large number
of events many of which happen simultaneously. At an atomic level our
bodies are made up of atoms, and molecules, in simultaneous motion.
At a macroscopic level the universe is populated with galaxies of stars in
simultaneous motion.
When we perform a simple action, like driving a car along a freew ay,
we are aw are of the fact that there may be several hundreds of cars within
our immediate environment, yet we are able to perform the complex task
of driving a car, and avoiding all these potential hazards without even
thinking about it.
In the real world sequential activities are a rarity. As we walk down the
street we would be very surprised to find only one thing happening, we
expect to encounter many simultaneous events.
If we did not have the ability to analyze and predict the outcome of
many simultaneous events we would live in great danger, and tasks like
driving a car would be impossible. The fact that we can do things which
require processing massive amounts of parallel infor mation suggests that
we are equipped with perceptual mechanisms which allow us to intuitively
understand concurrency without consciously thinking about it.
When it comes t o computer programming things suddenly become
inverted. Programming a sequential chain of activities is viewed the norm
, and in some sense is thought of as being easy, whereas programming
collections of concurrent activities is avoided as much as possible, and is
generally perceived as being diecult.
I believe that this is due to the poor support which is provided for con-
currency in virtually all conventional programming languages. The vast
majority of programming languages are essentially sequential; any concur-
rency in the language is provided by the underlying operating system, and
not by the programming language.
In this thesis I present a view of the world where concurrency is pro-
vided by the programming language, and not by the underlying operating
system. Languages which have good support for concurrency I call Concur-