In some ways, the history of programming language theory predates even the development of programming languages. The
lambda calculus, developed by
Alonzo Church and
Stephen Cole Kleene in the 1930s, is considered by some to be the world's first programming language, even though it was intended to
model computation rather than being a means for programmers to
describe algorithms to a computer system. Many modern
functional programming languages have been described as providing a "thin veneer" over the lambda calculus, and many are described easily in terms of it. The first programming language to be invented was
Plankalkül, which was designed by
Konrad Zuse in the 1940s, but not publicly known until 1972, and not implemented until 1998. The first widely known and successful
high-level programming language was
FORTRAN (for Formula Translation), developed from 1954 to 1957 by a team of
IBM researchers led by
John Backus. The success of FORTRAN led to the formation of a committee of scientists to develop a "universal" computer language; the result of their effort was
ALGOL 58. Separately,
John McCarthy of
Massachusetts Institute of Technology (MIT) developed
Lisp, the first language with origins in academia to be successful. With the success of these initial efforts, programming languages became an active topic of research in the 1960s and beyond.
Timeline Some other key events in the history of programming language theory since then: ; 1950s •
Noam Chomsky developed the
Chomsky hierarchy in the field of linguistics, a discovery which has directly impacted programming language theory and other branches of computer science. ; 1960s • In 1962, the
Simula language was developed by
Ole-Johan Dahl and
Kristen Nygaard; it is widely considered to be the first example of an
object-oriented programming language; Simula also introduced the concept of
coroutines. • In 1964,
Peter Landin is the first to realize Church's lambda calculus can be used to model programming languages. He introduces the
SECD machine which "interprets" lambda expressions. • In 1965, Landin introduces the
J operator, essentially a form of
continuation. • In 1966, Landin introduces
ISWIM, an abstract computer
programming language in his article
The Next 700 Programming Languages. It is influential in the design of languages leading to the
Haskell language. • In 1966,
Corrado Böhm introduced the language CUCH (Curry-Church). • In 1967,
Christopher Strachey publishes his influential set of lecture notes
Fundamental Concepts in Programming Languages, introducing the terminology
R-values, L-values,
parametric polymorphism, and
ad hoc polymorphism. • In 1969,
J. Roger Hindley publishes
The Principal Type-Scheme of an Object in Combinatory Logic, later generalized into the
Hindley–Milner type inference algorithm. • In 1969,
Tony Hoare introduces the
Hoare logic, a form of
axiomatic semantics. • In 1969,
William Alvin Howard observed that a "high-level"
proof system, referred to as
natural deduction, can be directly interpreted in its
intuitionistic version as a typed variant of the
model of computation known as
lambda calculus. This became known as the
Curry–Howard correspondence. ; 1970s • In 1970,
Dana Scott first publishes his work on
denotational semantics. • In 1972,
logic programming and
Prolog were developed thus allowing computer programs to be expressed as mathematical logic. • A team of scientists at
Xerox PARC led by
Alan Kay develop
Smalltalk, an object-oriented language widely known for its innovative development environment. • In 1974,
John C. Reynolds discovers
System F. It had already been discovered in 1971 by the mathematical logician
Jean-Yves Girard. • From 1975,
Gerald Jay Sussman and
Guy Steele develop the
Scheme language, a Lisp dialect incorporating
lexical scoping, a unified namespace, and elements from the
actor model including first-class
continuations. • Backus, at the 1977
Turing Award lecture, assailed the current state of industrial languages and proposed a new class of programming languages now known as
function-level programming languages. • In 1977,
Gordon Plotkin introduces
Programming Computable Functions, an abstract typed functional language. • In 1978,
Robin Milner introduces the
Hindley–Milner type system inference algorithm for
ML language.
Type theory became applied as a discipline to programming languages, this application has led to great advances in type theory over the years. ; 1980s • In 1981,
Gordon Plotkin publishes his paper on
structured operational semantics. • In 1988,
Gilles Kahn published his paper on
natural semantics. • There emerged
process calculi, such as the
Calculus of Communicating Systems of
Robin Milner, and the
Communicating sequential processes model of
C. A. R. Hoare, as well as similar models of concurrency such as the
actor model of
Carl Hewitt. • In 1985, the release of
Miranda sparks an academic interest in lazy-evaluated
purely functional programming languages. A committee was formed to define an open standard resulting in the release of the Haskell 1.0 standard in 1990. •
Bertrand Meyer created the methodology
design by contract and incorporated it into the
Eiffel language. ; 1990s •
Gregor Kiczales, Jim Des Rivieres and
Daniel G. Bobrow published the book
The Art of the Metaobject Protocol. •
Eugenio Moggi and
Philip Wadler introduced the use of
monads for structuring programs written in
functional programming languages. == Sub-disciplines and related fields ==