
Programming language theory (PLT) is a branch of
computer science
Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includin ...
that deals with the design, implementation, analysis, characterization, and classification of
formal language
In logic, mathematics, computer science, and linguistics, a formal language consists of words whose letters are taken from an alphabet and are well-formed according to a specific set of rules.
The alphabet of a formal language consists of s ...
s known as
programming languages. Programming language theory is closely related to other fields including
mathematics,
software engineering, and
linguistics
Linguistics is the scientific study of human language. It is called a scientific study because it entails a comprehensive, systematic, objective, and precise analysis of all aspects of language, particularly its nature and structure. Lingu ...
. There are a number of
academic conference
An academic conference or scientific conference (also congress, symposium, workshop, or meeting) is an event for researchers (not necessarily academics) to present and discuss their scholarly work. Together with academic or scientific journals ...
s and
journals in the area.
History
In some ways, the history of programming language theory predates even the development of programming languages themselves. 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 easily described 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
In computer science, a high-level programming language is a programming language with strong abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language ''elements'', be easier to ...
was
Fortran, 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
ALGOL 58, originally named IAL, is one of the family of ALGOL computer programming languages. It was an early compromise design soon superseded by ALGOL 60. According to John Backus
The Zurich ACM-GAMM Conference had two principal motives in p ...
. Separately,
John McCarthy of
MIT developed
Lisp
A lisp is a speech impairment in which a person misarticulates sibilants (, , , , , , , ). These misarticulations often result in unclear speech.
Types
* A frontal lisp occurs when the tongue is placed anterior to the target. Interdental lispi ...
, 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.
Some other key events in the history of programming language theory since then:
1950s
*
Noam Chomsky
Avram Noam Chomsky (born December 7, 1928) is an American public intellectual: a linguist, philosopher, cognitive scientist, historian, social critic, and political activist. Sometimes called "the father of modern linguistics", Chomsky is ...
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
* The
Simula
Simula is the name of two simulation programming languages, Simula I and Simula 67, developed in the 1960s at the Norwegian Computing Center in Oslo, by Ole-Johan Dahl and Kristen Nygaard. Syntactically, it is an approximate superset of AL ...
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
In computer science, Peter Landin's J operator is a programming construct that post-composes a lambda expression with the continuation to the current lambda-context. The resulting “function” is first-class and can be passed on to subseque ...
, 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 programming language.
* In 1966,
Corrado Böhm introduced the programming 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
J. Roger Hindley is a prominent British logician best known for the Hindley–Milner type inference algorithm. Since 1998, he has been an Honorary Research Fellow at Swansea University.
Education
Hindley graduated in 1960 from Queen's Univers ...
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
In computer science, and more specifically in computability theory and computational complexity theory, a model of computation is a model which describes how an output of a mathematical function is computed given an input. A model describes h ...
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
Prolog is a logic programming language associated with artificial intelligence and computational linguistics.
Prolog has its roots in first-order logic, a formal logic, and unlike many other programming languages, Prolog is intended primarily a ...
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 programming 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 inference algorithm for
ML.
Type theory
In mathematics, logic, and computer science, a type theory is the formal system, formal presentation of a specific type system, and in general type theory is the academic study of type systems. Some type theories serve as alternatives to set theor ...
became applied as a discipline to programming languages, this application has led to tremendous advances in type theory over the years.
1980s
* In 1981,
Gordon Plotkin publishes his paper on
structured operational semantics
Operational semantics is a category of formal programming language semantics in which certain desired properties of a program, such as correctness, safety or security, are verified by constructing proofs from logical statements about its execut ...
.
* 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 pure 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 programming language.
1990s
*
Gregor Kiczales, Jim Des Rivieres and
Daniel G. Bobrow published the book ''
The Art of the Metaobject Protocol''.
*
Eugenio Moggi
Eugenio Moggi is a professor of computer science at the University of Genoa, Italy.
He first described the general use of monads to structure programs.
Biography
Academic qualifications:
* PhD in Computer Science, University of Edinburgh ...
and
Philip Wadler introduced the use of
monads for structuring programs written in
functional programming languages.
Sub-disciplines and related fields
There are several fields of study which either lie within programming language theory, or which have a profound influence on it; many of these have considerable overlap. In addition, PLT makes use of many other branches of
mathematics, including
computability theory,
category theory, and
set theory
Set theory is the branch of mathematical logic that studies sets, which can be informally described as collections of objects. Although objects of any kind can be collected into a set, set theory, as a branch of mathematics, is mostly concer ...
.
Formal semantics
Formal semantics is the formal specification of the behaviour of computer programs and programming languages. Three common approaches to describe the semantics or "meaning" of a computer program are
denotational semantics,
operational semantics and
axiomatic semantics.
Type theory
Type theory is the study of
type systems; which are "a tractable syntactic method for proving the absence of certain program behaviors by classifying phrases according to the kinds of values they compute".
[Benjamin C. Pierce. 2002]
Types and Programming Languages
MIT Press, Cambridge, Massachusetts, USA. Many programming languages are distinguished by the characteristics of their type systems.
Program analysis and transformation
Program analysis is the general problem of examining a program and determining key characteristics (such as the absence of classes of
program errors). Program transformation is the process of transforming a program in one form (language) to another form.
Comparative programming language analysis
Comparative programming language analysis seeks to classify programming languages into different types based on their characteristics; broad categories of programming languages are often known as
programming paradigm
Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms.
Some paradigms are concerned mainly with implications for the execution model of the language, s ...
s.
Generic and metaprogramming
Metaprogramming is the generation of higher-order programs which, when executed, produce programs (possibly in a different language, or in a subset of the original language) as a result.
Domain-specific languages
Domain-specific languages are languages constructed to efficiently solve problems of a particular part of domain.
Compiler construction
Compiler
In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs that ...
theory is the theory of writing ''compilers'' (or more generally, ''translators''); programs which translate a program written in one language into another form. The actions of a compiler are traditionally broken up into ''syntax analysis'' (
scanning and
parsing), ''semantic analysis'' (determining what a program should do), ''
optimization'' (improving the performance of a program as indicated by some metric; typically execution speed) and ''
code generation'' (generation and output of an equivalent program in some target language; often the
instruction set
In computer science, an instruction set architecture (ISA), also called computer architecture, is an abstract model of a computer. A device that executes instructions described by that ISA, such as a central processing unit (CPU), is called a ...
of a CPU).
Run-time systems
Run-time systems refer to the development of programming language
runtime environments and their components, including
virtual machines,
garbage collection, and
foreign function interfaces.
Journals, publications, and conferences
Conferences are the primary venue for presenting research in programming languages. The most well known conferences include the ''
Symposium on Principles of Programming Languages'' (POPL),
''Programming Language Design and Implementation'' (PLDI), the ''
International Conference on Functional Programming'' (ICFP), ''the
International Conference on Object Oriented Programming, Systems, Languages and Applications'' (OOPSLA) and ''the
International Conference on Architectural Support for Programming Languages and Operating Systems'' (ASPLOS)''.''
Notable journals that publish PLT research include the ''
ACM Transactions on Programming Languages and Systems'' (TOPLAS), ''
Journal of Functional Programming'' (JFP), ''
Journal of Functional and Logic Programming'', and ''
Higher-Order and Symbolic Computation''.
See also
*
SIGPLAN
*
Timeline of programming languages
*
Very high-level programming language
References
Further reading
*
Abadi, Martín and
Cardelli, Luca. ''A Theory of Objects''. Springer-Verlag.
*
Michael J. C. Gordon
Michael John Caldwell Gordon FRS (28 February 1948 – 22 August 2017) was a British computer scientist.
Life
Mike Gordon was born in Ripon, Yorkshire, England. He attended Dartington Hall School and Bedales School. In 1966, he was accepted t ...
. ''Programming Language Theory and Its Implementation''. Prentice Hall.
* Gunter, Carl and
Mitchell, John C. (eds.). ''Theoretical Aspects of Object Oriented Programming Languages: Types, Semantics, and Language Design''. MIT Press.
*
Harper, Robert.
Practical Foundations for Programming Languages'. Draft version.
*
Knuth, Donald E. (2003).
Selected Papers on Computer Languages'. Stanford, California: Center for the Study of Language and Information.
*
Mitchell, John C. ''Foundations for Programming Languages''.
*
Mitchell, John C. ''Introduction to Programming Language Theory''.
*
O'Hearn, Peter. W. and Tennent, Robert. D. (1997).
Algol-like Languages'. Progress in Theoretical Computer Science. Birkhauser, Boston.
*
Pierce, Benjamin C. (2002).
Types and Programming Languages'. MIT Press.
* Pierce, Benjamin C. ''Advanced Topics in Types and Programming Languages''.
* Pierce, Benjamin C. ''et al.'' (2010).
Software Foundations'.
External links
{{Commons category
Lambda the Ultimate a community weblog for professional discussion and repository of documents on programming language theory.
Great Works in Programming Languages Collected by
Benjamin C. Pierce
Benjamin Crawford Pierce is the Henry Salvatori Professor of computer science at the University of Pennsylvania. Pierce joined Penn in 1998 from Indiana University and held research positions at the University of Cambridge and the University of E ...
(
University of Pennsylvania
The University of Pennsylvania (also known as Penn or UPenn) is a private research university in Philadelphia. It is the fourth-oldest institution of higher education in the United States and is ranked among the highest-regarded universit ...
).
Classic Papers in Programming Languages and Logic Collected by
Karl Crary Karl may refer to:
People
* Karl (given name), including a list of people and characters with the name
* Karl der Große, commonly known in English as Charlemagne
* Karl Marx, German philosopher and political writer
* Karl of Austria, last Austrian ...
(
Carnegie Mellon University).
Programming Language Research Directory by Mark Leone.
λ-Calculus: Then & Nowby
Dana S. Scott
Dana Stewart Scott (born October 11, 1932) is an American logician who is the emeritus Hillman University Professor of Computer Science, Philosophy, and Mathematical Logic at Carnegie Mellon University; he is now retired and lives in Berkeley, ...
for the ACM Turing Centenary Celebration
Grand Challenges in Programming Languages Panel session at
POPL 2009.