computers was different. Based on
the ideas of mathematical logic that I
studied at university, I put forward a
set of axioms that describe the properties of the implementation without
describing exactly how it worked. It
would be possible, I hoped, to state
those properties sufficiently precisely
that programmers would be able to
write programs using only those properties, and leave the implementers the
freedom to implement the language
in different ways, but at the same time
taking responsibility for the fact that
their implementation actually satisfied the properties that the program
was relying on.
I haven’t abandoned this idea, but
it didn’t turn out to be very popular
among language designers.
You then turned to “structured
programming,” and collaborated
with edsger Dijkstra and ole-
Johan Dahl on an important book.
I met Dijkstra and Dahl at a working
conference in 1972 on formal language definition. Dijkstra was the other person writing an Algol compiler at
the same time as I was, and Dahl was
inventing a new simulation language
called Simula, in which he introduced
the ideas of object-oriented programming that would later have a great
influence on programming and programming languages. All three of us
had written draft monographs on our
favorite topics: one by Dijkstra called
“Notes on Structured Programming,”
one by Dahl on hierarchical program
structures, and my own notes on data
structuring. I thought it would be interesting to collect these three together and publish them as a single book.
I spent quite some time trying to
understand what Dahl had written.
He was a very brilliant but very dense
writer. I had great fun trying to simplify some of his really brilliant ideas on
how to structure programs in the large.
I did not work on Dijkstra’s material;
that was pretty clear and well written.
What was your involvement
with Pascal?
Pascal was the language designed
as a teaching language by my friend
Niklaus Wirth, after the language we
had designed together in the early
1960s had not been recommended.
We used to meet quite frequently to
talk about the design. My research on
applying the axiomatic method to programming language semantics had
made quite considerable progress by
then, and I thought it was time to see
whether I could tackle a complete language using this style of definition. I
managed to do the easy bits, but there
were still quite a lot of challenges left
over, which we just omitted from the
definition of the language.
When did you start to look at
monitors for operating systems?
In 1972 I organized a conference in
Belfast where we assembled quite a
brilliant group of scientists to talk
about operating system techniques. I
was interested in exploring the ideas
of from an axiomatic point of view.
Could I define axioms that would enable people to safely write concurrent
programs in the same way as they can
write sequential programs today? We
devoted an afternoon to discussing the
emerging ideas of monitors; I and Per
Brinch Hansen were the main people
to contribute to that discussion.
how did you come to move from
monitors to communicating
sequential processes?
The idea of a communicating process
is that instead of calling its components as subroutine, or a method,
you’d actually communicate the values that you wanted to transmit to it
by some input or output channel, and
it would communicate its results back
by a similar medium. The reason for
this was a technological advance in
it was easy to predict
that the best way of
making a large and
fast computer would
be to assemble a large
number of very cheap
microprocessors
together.
the hardware: the advent of the microprocessor, a cheap and small machine
with not very much store, but capable
of communicating with other microprocessors of a similar nature along
wires. It was easy to predict that the
best way of making a large and fast
computer would be to assemble a
large number of very cheap microprocessors together, and allow them to
cooperate with each other on a single
task by communicating along wires
that connected them. For this, a new
architecture of programs would be appropriate, and perhaps a new language
for expressing the programs. That was
how the communicating sequential
processes came to take a leading role
in my subsequent research.
You’ve always been interested
in the connection between
theory and practice.
My move back to Oxford was partially
motivated by my idea to study the Oxford ideas on the semantics of programming languages again. I hoped
that it would be possible, using the Oxford techniques of defining semantics,
to clarify the exact meaning of communicating processes in a way that would
be helpful to people writing programs
in that idiom.
It was a great loss that Christopher
Strachey had recently died. I took
over his chair at Oxford, quite literally
sitting in his chair and sitting at his
desk. I happened to open the drawer,
and come across a final report on one
of his research projects, in which he
put forward his ideals for keeping the
theory and practice of programming
and computer science very much
in step with each other. He said the
theory could easily become sterile,
and the practice could easily become
ad hoc and unreliable, if you weren’t
able to keep one firmly based on the
other, and the other firmly studying
problems with the practical uses of
computers.
have there been successes using
formal methods in practice?
At a keynote lecture for the British
Computer Society I talked a bit about
formalization and verification, and
put forward a conjecture, fairly tentatively, that maybe the time was right
to scale these things up by trial use