Programming language theory

Programming language theory

Programming language theory (commonly known as PLT) is a branch of computer science that deals with the design, implementation, analysis, characterization, and classification of programming languages and programming language features. It is a multi-disciplinary field, both depending on and, in some cases, affecting mathematics, software engineering, linguistics, and even the cognitive sciences. It is a well-recognized branch of computer science, and as of 2006, an active research area, with results published in numerous journals dedicated to PLT, as well as in general computer science and engineering publications. Most undergraduate computer science programs require coursework in the topic.

An unofficial symbol of the field of programming language theory is the lowercase Greek letter lambda. This usage derives from the lambda calculus, a computational model widely used by programming language researchers. Many texts and papers on programming and programming languages utilize the lambda in some fashion. It graces the cover of the classic text "Structure and Interpretation of Computer Programs", and the title of many of the so-called Lambda Papers, written by Gerald Jay Sussman and Guy Steele, the developers of the Scheme programming language. A popular website on programming language theory is called [http://lambda-the-ultimate.org Lambda the Ultimate] , in honor of Sussman and Steele's work.

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 [http://www.c2.com/cgi/wiki?ModelsOfComputation] , and many are easily described in terms of it.

The first programming language to be proposed was Plankalkül, which was designed by Konrad Zuse in the 1940s, but not publicly known until 1972 (and not implemented until 2000, five years after Zuse's death). The first widely known and successful programming language 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. Separately, John McCarthy of MIT developed the Lisp programming language (based on the lambda calculus), 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:

* In the 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.
* In the 1960s, 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 the 1970s:
** A team of scientists at Xerox PARC led by Alan Kay develop Smalltalk, an object-oriented language widely known for its innovative (and theretofore unknown) development environment.
** Sussman and 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 ACM 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.
** 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,
** Type theory became applied as a discipline to programming languages, led by Milner; this application has led to tremendous advances in type theory over the years.
* In the 1990s:
** 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.

* Compiler 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 of a CPU).
* Type theory is the study of type systems; which are "tractable syntactic method(s) for proving the absence of certain program behaviors by classifying phrases according to the kinds of values they compute." (Types and Programming Languages, MIT Press, 2002). Many programming languages are distinguished by the characteristics of their type systems.
* Formal semantics is the formal specification of the behavior of computer programs and programming languages.
* Program transformation is the process of transforming a program in one form (language) to another form; program analysis is the general problem of examining a program and determining key characteristics (such as the absence of classes of program errors).
* Runtime systems refers to the development of programming language runtime environments and their components, including virtual machines, garbage collection, and foreign function interfaces.
* 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 paradigms.
* 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 are languages constructed to efficiently solve problems in a particular problem domain.

In addition, PLT makes use of many other branches of mathematics, including computability theory, category theory, and set theory.

PLT-specific journals and publications

Journals which publish original research in programming language theory include:

* "ACM Transactions on Programming Languages and Systems" [http://www.cs.wustl.edu/~toplas/]
* "Computer Languages, Systems, and Structures" [http://www.elsevier.com/wps/find/journaldescription.cws_home/638299/description]
* "Journal of Functional Programming, The"
* "Journal of Functional and Logic Programming, The"
* "Journal of Symbolic Computation, The"
* "Theoretical Computer Science"

A more complete bibliography is available [http://www.disi.unige.it/research/Categorical_semantics/language/publications.html here] ; also see the list of publications in computer science.

See also

* Timeline of programming languages

External links

* [http://www.haskell.org/haskell-history.html The History of Haskell]
* [http://www.levenez.com/lang/history.html Computer Languages History]
* [http://homepages.cwi.nl/~atanasso/ref List of Online PLT References]
* [http://www.cs.cmu.edu/afs/cs.cmu.edu/user/mleone/web/language-research.html A collection of information and resources for research in programming language theory, design, implementation, and related areas]
* "Types and Programming Languages" by Benjamin Pierce (MIT Press 2002) [http://www.cis.upenn.edu/~bcpierce/tapl/main.html]
* "Programming Language Pragmatics, 2nd Edition" by Michael Scott (Morgan-Kaufmann, 2006) [http://www.cs.rochester.edu/~scott/pragmatics/]
* "Essentials of Programming Languages" by Daniel P. Friedman, Mitchell Wand, and Christopher T. Haynes (MIT Press 2001) [http://www.cs.indiana.edu/eopl/]
* [http://lambda-the-ultimate.org/policies#Purpose Lambda the Ultimate] , a community weblog for professional discussion and repository of documents on programming language theory.


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Look at other dictionaries:

  • Programming language — lists Alphabetical Categorical Chronological Generational A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that… …   Wikipedia

  • Programming language reference — A programming language reference (or language reference manual) is an artifact that describes a programming language so that users and developers can understand the basic elements of and write computer programs in the target language.A… …   Wikipedia

  • Concatenative programming language — Programming paradigms Agent oriented Automata based Component based Flow based Pipelined Concatenative Concurr …   Wikipedia

  • Eiffel (programming language) — Infobox programming language name = Eiffel paradigm = object oriented year = 1986 designer = Bertrand Meyer developer = Bertrand Meyer Eiffel Software latest release version = 4.2 latest release date = Feb 6, 1998 typing = static typing, strong… …   Wikipedia

  • Self (programming language) — Infobox programming language name = Self paradigm = object oriented prototype based year = 1986 designer = David Ungar, Randall Smith developer = David Ungar, Randall Smith, Stanford University, Sun Microsystems latest release version = 4.3… …   Wikipedia

  • APL (programming language) — APL Paradigm(s) array, functional, structured, modular Appeared in 1964 Designed by Kenneth E. Iverson Developer Kenneth E. Iverson …   Wikipedia

  • computer programming language — Introduction       any of various languages for expressing a set of detailed instructions for a digital computer. Such instructions can be executed directly when they are in the computer manufacturer specific numerical form known as machine… …   Universalium

  • Lisp (programming language) — Infobox programming language name = Lisp paradigm = multi paradigm: functional, procedural, reflective generation = 3GL year = 1958 designer = John McCarthy developer = Steve Russell, Timothy P. Hart, and Mike Levin latest release version =… …   Wikipedia

  • Educational programming language — An educational programming language is a programming language that is designed primarily as a learning instrument and not so much as a tool for writing real world application programs.ome examplesChildren* AgentSheets is an award winning game and …   Wikipedia

  • DYNAMO (programming language) — DYNAMO (DYNAmic MOdels) was a simulation language and accompanying graphical notation developed within the system dynamics analytical framework. It was originally for industrial dynamics but was soon extended to other applications, including… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”