Programming language theory

{{Short description|Branch of computer science}}

{{Redirect |Theory of programming|the branch of CS that deals with what problems can be solved|Theory of computation}}

{{More footnotes |date=October 2015}}

File:Lambda lc.svg letter λ (lambda) is an unofficial symbol of the field of programming-language theory.{{Citation needed|date=July 2020}} This usage derives from the lambda calculus, a model of computation introduced by Alonzo Church in the 1930s and widely used by programming-language researchers. It graces the cover of the classic text Structure and Interpretation of Computer Programs,{{Cite book |last1=Abelson |first1=Harold |author1-link=Hal Abelson |last2=Sussman |first2=Gerald Jay |author2-link=Gerald Jay Sussman |last3=Sussman |first3=Julie |author3-link=Julie Sussman |date=1996 |url=https://www.worldcat.org/oclc/34576857 |title=Structure and Interpretation of Computer Programs |edition=2nd |publisher=MIT Press |isbn=0-262-01153-0 |location=Cambridge, Massachusetts |oclc=34576857}} and the title of the so-called Lambda Papers of 1975 to 1980, written by Gerald Jay Sussman and Guy L. Steele Jr., the developers of the Scheme language.]]

Programming language theory (PLT) is a branch of computer science that deals with the design, implementation, analysis, characterization, and classification of formal languages known as programming languages. Programming language theory is closely related to other fields including linguistics, mathematics, and software engineering.

History

{{see also|History of programming languages|Programming language#History}}

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,{{Cite web |date=December 3, 2014 |title=Models Of Computation |url=http://www.c2.com/cgi/wiki?ModelsOfComputation |url-status=live |archive-url=https://web.archive.org/web/20201130055927/http://wiki.c2.com/?ModelsOfComputation |archive-date=November 30, 2020 |website=wiki.c2.com}} 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=

{{See also|Timeline of programming languages}}

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

; 1970s

; 1980s

; 1990s

= Formal semantics =

{{Further|Formal semantics of programming languages}}

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 =

{{Further|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. [https://books.google.com/books?id=ti6zoAC9Ph8C&dq=%22Types+and+Programming+Languages%22&pg=PR13 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 =

{{Further|Program analysis|Program 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 languages into different types based on their characteristics; broad categories of languages are often known as programming paradigms.

= 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 those constructed to efficiently solve problems in a given domain, or part of such.

= Compiler construction =

{{Further|Compiler construction}}

Compiler theory is the theory of writing compilers (or more generally, translators); programs that 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 architecture of a central processing unit (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 & 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

References

{{Reflist}}

Further reading

{{see also|Programming language#Further reading|Semantics of programming languages#Further reading}}

  • Abadi, Martín and Cardelli, Luca. A Theory of Objects. Springer-Verlag.
  • Michael J. C. Gordon. 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. [https://web.archive.org/web/20070627041059/https://www.cs.cmu.edu/~rwh/plbook/book.pdf Practical Foundations for Programming Languages]. Draft version.
  • Knuth, Donald E. (2003). [http://www-cs-faculty.stanford.edu/~knuth/cl.html 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). [https://web.archive.org/web/20110719175135/http://www.eecs.qmul.ac.uk/~ohearn/Algol/algol.html ALGOL-like Languages]. Progress in Theoretical Computer Science. Birkhauser, Boston.
  • Pierce, Benjamin C. (2002). [http://www.cis.upenn.edu/~bcpierce/tapl/main.html Types and Programming Languages]. MIT Press.
  • Pierce, Benjamin C. Advanced Topics in Types and Programming Languages.
  • Pierce, Benjamin C. et al. (2010). [http://www.cis.upenn.edu/~bcpierce/sf/ Software Foundations].