andrews at csd.uwo.ca
Sun Jun 1 20:50:14 EDT 2014
Coming a little late to the party, with apologies.
My impression is that the early use of types in programming languages,
in languages such as Fortran, Cobol, PL/I and the Algols, mostly
concentrated on distinctions between primitive types, such as integers
and floating-point numbers, and on arrays. By the early 1970s, with B,
BCPL, C and Pascal, this had expanded to pointers and "structs"
("records" in Pascal). "Type" here was just a natural English word to
apply to this concept, as it had been for Russell to apply to a somewhat
Note that none of these kinds of types has much in common with the types
that had been studied in type theory up to that point. Church's T system
was built on a set of base types, which play the role that primitive
types play in programming languages, but I don't think that the type
theorists gave them much thought. The types that they worked with most
were types of functions, predicates, connectives and so on.
Independent of programming languages and preceding them, the genesis of
types seems to be Russell's use of types to resolve the set-theoretic
paradoxes. This led (after some false starts) to Church's T system.
From there, the chain of discoveries seems to go as follows. Dana
Scott's PPLAMBDA paper does not refer explicitly to Church, but I think
it's safe to assume from the paper that he knew about system T. Milner
et al., in their Edinburgh LCF book, refer to the PPLAMBDA paper as the
source of the idea of types being applied to classify functions. From
there, Church-style types (usefully extended) made their way into ML.
It was only after ML that people started really trying to unify the old
Pascal-style types and the type theory-based types. I think of
Cardelli's name in this context, and I believe that he had a lot to do
with it, but that he wasn't the only one. "structs" correspond to
products and "unions" to sums; if we want to pass around functions, or
objects "containing" functions, then we need to assign types to
functions; and so on. Cardelli's big monograph "Type Systems" contains
(for me) the clearest exposition of those ideas.
It is interesting that Christopher Strachey knew Dana Scott, and was
involved in the development of B and BCPL in the late 1960s, but (to my
knowledge) did not make the connection between type-theoretic types and
programming-language types. But I might just not be familiar with all
the evidence in that regard. I imagine that some smart people at the
interface between type theory and programming languages must have
noticed a connection in a general way, but they don't seem to have made
any solid progress until ML came on the scene.
More information about the Types-list