The history of the programming language
Scheme A scheme is a systematic plan for the implementation of a certain idea.
Scheme or schemer may refer to:
Arts and entertainment
* ''The Scheme'' (TV series), a BBC Scotland documentary series
* The Scheme (band), an English pop band
* ''The Schem ...
begins with the development of earlier members of the
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 lisping ...
family of languages during the second half of the twentieth century. During the design and development period of Scheme, language designers
Guy L. Steele
Guy Lewis Steele Jr. (; born October 2, 1954) is an American computer scientist who has played an important role in designing and documenting several computer programming languages and technical standards.
Biography
Steele was born in Missouri ...
and
Gerald Jay Sussman released an influential series of
Massachusetts Institute of Technology
The Massachusetts Institute of Technology (MIT) is a private land-grant research university in Cambridge, Massachusetts. Established in 1861, MIT has played a key role in the development of modern technology and science, and is one of the ...
(MIT)
AI Memo
AI is artificial intelligence, intellectual ability in machines and robots.
Ai, AI or A.I. may also refer to:
Animals
* Ai (chimpanzee), an individual experimental subject in Japan
* Ai (sloth) or the pale-throated sloth, northern Amazonian ma ...
s known as the ''
Lambda Papers The history of the programming language Scheme begins with the development of earlier members of the Lisp family of languages during the second half of the twentieth century. During the design and development period of Scheme, language designers ...
'' (1975–1980). This resulted in the growth of popularity in the language and the era of standardization from 1990 onward. Much of the history of Scheme has been documented by the developers themselves.
Prehistory
The development of Scheme was heavily influenced by two predecessors that were quite different from one another:
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 lisping ...
provided its general semantics and syntax, and
ALGOL provided its
lexical scope and block structure. Scheme is a dialect of Lisp but Lisp has evolved; the Lisp dialects from which Scheme evolved—although they were in the mainstream at the time—are quite different from any modern Lisp.
Lisp
Lisp was invented by
John McCarthy in 1958 while he was at the
Massachusetts Institute of Technology
The Massachusetts Institute of Technology (MIT) is a private land-grant research university in Cambridge, Massachusetts. Established in 1861, MIT has played a key role in the development of modern technology and science, and is one of the ...
(MIT). McCarthy published its design in a paper in ''
Communications of the ACM
''Communications of the ACM'' is the monthly journal of the Association for Computing Machinery (ACM). It was established in 1958, with Saul Rosen as its first managing editor. It is sent to all ACM members.
Articles are intended for readers with ...
'' in 1960, entitled "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I"
(Part II was never published). He showed that with a few simple operators and a notation for functions, one can build a
Turing-complete
In computability theory, a system of data-manipulation rules (such as a computer's instruction set, a programming language, or a cellular automaton) is said to be Turing-complete or computationally universal if it can be used to simulate any Tur ...
language for algorithms.
The use of
s-expressions which characterize the syntax of Lisp was initially intended to be an interim measure pending the development of a language employing what McCarthy called "
m-expression
In computer programming, M-expressions (or meta-expressions) were an early proposed syntax for the Lisp programming language, inspired by contemporary languages such as Fortran and ALGOL. The notation was never implemented into the language and, ...
s". As an example, the m-expression
car ons[A,B
is equivalent to the s-expression
. S-expressions proved popular, however, and the many attempts to implement m-expressions failed to catch on.
The first implementation of Lisp was on an
IBM 704
The IBM 704 is a large digital mainframe computer introduced by IBM in 1954. It was the first mass-produced computer with hardware for floating-point arithmetic. The IBM 704 ''Manual of operation'' states:
The type 704 Electronic Data-Pro ...
by
Steve Russell, who read McCarthy's paper and coded the eval function he described in machine code. The familiar (but puzzling to newcomers) names
CAR and CDR used in Lisp to describe the head element of a list and its tail, evolved from two
IBM 704
The IBM 704 is a large digital mainframe computer introduced by IBM in 1954. It was the first mass-produced computer with hardware for floating-point arithmetic. The IBM 704 ''Manual of operation'' states:
The type 704 Electronic Data-Pro ...
assembly language commands: Contents of Address Register and Contents of Decrement Register, each of which returned the contents of a 15-bit register corresponding to segments of a
36-bit
36-bit computers were popular in the early mainframe computer era from the 1950s through the early 1970s.
Starting in the 1960s, but especially the 1970s, the introduction of 7-bit ASCII and 8-bit EBCDIC led to the move to machines using 8-bit ...
IBM 704 instruction
word
A word is a basic element of language that carries an semantics, objective or pragmatics, practical semantics, meaning, can be used on its own, and is uninterruptible. Despite the fact that language speakers often have an intuitive grasp of w ...
.
The first complete Lisp compiler, written in Lisp, was implemented in 1962 by Tim Hart and Mike Levin at MIT.
This compiler introduced the Lisp model of incremental compilation, in which compiled and interpreted functions can intermix freely.
The two variants of Lisp most significant in the development of Scheme were both developed at MIT: LISP 1.5 developed by McCarthy and others, and
Maclisp – developed for MIT's
Project MAC, a direct descendant of LISP 1.5. which ran on the PDP-10 and
Multics
Multics ("Multiplexed Information and Computing Service") is an influential early time-sharing operating system based on the concept of a single-level memory.Dennis M. Ritchie, "The Evolution of the Unix Time-sharing System", Communications of t ...
systems.
Since its inception, Lisp was closely connected with the
artificial intelligence
Artificial intelligence (AI) is intelligence—perceiving, synthesizing, and inferring information—demonstrated by machines, as opposed to intelligence displayed by animals and humans. Example tasks in which this is done include speech re ...
(AI) research community, especially on
PDP-10
Digital Equipment Corporation (DEC)'s PDP-10, later marketed as the DECsystem-10, is a mainframe computer family manufactured beginning in 1966 and discontinued in 1983. 1970s models and beyond were marketed under the DECsystem-10 name, especi ...
. The 36-bit word size of the
PDP-6
The PDP-6, short for Programmed Data Processor model 6, is a computer developed by Digital Equipment Corporation (DEC) during 1963 and first delivered in the summer of 1964.
It was an expansion of DEC's existing 18-bit systems to use a 36-bit da ...
and
PDP-10
Digital Equipment Corporation (DEC)'s PDP-10, later marketed as the DECsystem-10, is a mainframe computer family manufactured beginning in 1966 and discontinued in 1983. 1970s models and beyond were marketed under the DECsystem-10 name, especi ...
was influenced by the usefulness of having two Lisp
18-bit
18 binary digits have (1000000 octal, 40000 hexadecimal) distinct combinations.
18 bits was a common word size for smaller computers in the 1960s, when large computers often used 36 bit words and 6-bit character sets, sometimes implemented a ...
pointers in one word.
ALGOL
ALGOL 58, originally to be called IAL for "International Algorithmic Language", was developed jointly by a committee of European and American computer scientists in a meeting in 1958 at
ETH Zurich
(colloquially)
, former_name = eidgenössische polytechnische Schule
, image = ETHZ.JPG
, image_size =
, established =
, type = Public
, budget = CHF 1.896 billion (2021)
, rector = Günther Dissertori
, president = Joël Mesot
, ac ...
.
ALGOL 60
ALGOL 60 (short for ''Algorithmic Language 1960'') is a member of the ALGOL family of computer programming languages. It followed on from ALGOL 58 which had introduced code blocks and the begin and end pairs for delimiting them, representing a k ...
, a later revision developed at the ALGOL 60 meeting in Paris and now commonly named
ALGOL, became the standard for the publication of algorithms and had a profound effect on future language development, despite the language's lack of commercial success and its limitations.
Tony Hoare
Sir Charles Antony Richard Hoare (Tony Hoare or C. A. R. Hoare) (born 11 January 1934) is a British computer scientist who has made foundational contributions to programming languages, algorithms, operating systems, formal verification, and c ...
has remarked: "Here is a language so far ahead of its time that it was not only an improvement on its predecessors but also on nearly all its successors."
ALGOL introduced the use of block structure and lexical scope. It was also notorious for its difficult
call by name default parameter passing mechanism, which was defined so as to require textual substitution of the expression representing the working parameter in place of the formal parameter during execution of a procedure or function, causing it to be re-evaluated each time it is referenced during execution. ALGOL implementors developed a mechanism they called a
thunk
In computer programming, a thunk is a subroutine used to inject a calculation into another subroutine. Thunks are primarily used to delay a calculation until its result is needed, or to insert operations at the beginning or end of the other subro ...
, which captured the context of the working parameter, enabling it to be evaluated during execution of the procedure or function.
Carl Hewitt, the Actor model, and the birth of Scheme
In 1971 Sussman,
Drew McDermott
Drew McDermott (December 27, 1949 – May 26, 2022) was a professor of Computer Science at Yale University. He was known for his contributions in artificial intelligence and planning.
Education
Drew McDermott earned Bachelor of Science, B.S., Mas ...
, and
Eugene Charniak had developed a system called
Micro-Planner which was a partial and somewhat unsatisfactory implementation of
Carl Hewitt's ambitious
Planner
Planner may refer to:
* A personal organizer (book) for planning
* Microsoft Planner
* Planner programming language
* Planner (PIM for Emacs)
* Urban planner
* Route planner
* Meeting and convention planner
* Japanese term for video game de ...
project. Sussman and Hewitt worked together along with others on Muddle, later renamed
MDL MDL may refer to:
Computing
* Fayyad & Irani's MDL method, a discretization method
* MDL (programming language), derived from LISP
* The extension for Valve's Source, Source 2 and ID Software's IDTech game engines proprietary model file format
* ...
, an extended Lisp which formed a component of Hewitt's project. Drew McDermott, and Sussman in 1972 developed the Lisp-based language ''Conniver'', which revised the use of automatic backtracking in Planner which they thought was unproductive. Hewitt was dubious that the "hairy control structure" in Conniver was a solution to the problems with Planner.
Pat Hayes
Patrick John Hayes FAAAI (born 21 August 1944) is a British computer scientist who lives and works in the United States. , he is a Senior Research Scientist at the Institute for Human and Machine Cognition in Pensacola, Florida.
Education
Hay ...
remarked: "Their
ussman and McDermottsolution, to give the user access to the implementation primitives of Planner, is however, something of a retrograde step (what are Conniver's semantics?)"
In November 1972, Hewitt and his students invented the
Actor model
The actor model in computer science is a mathematical model of concurrent computation that treats ''actor'' as the universal primitive of concurrent computation. In response to a message it receives, an actor can: make local decisions, create more ...
of computation as a solution to the problems with Planner.
A partial implementation of Actors was developed called Planner-73 (later called PLASMA). Steele, then a graduate student at MIT, had been following these developments, and he and Sussman decided to implement a version of the Actor model in their own "tiny Lisp" developed on
Maclisp, to understand the model better. Using this basis they then began to develop mechanisms for creating actors and sending messages.
PLASMA's use of lexical scope was similar to the
lambda calculus
Lambda calculus (also written as ''λ''-calculus) is a formal system in mathematical logic for expressing computation based on function abstraction and application using variable binding and substitution. It is a universal model of computation ...
. Sussman and Steele decided to try to model Actors in the lambda calculus. They called their modeling system Schemer, eventually changing it to Scheme to fit the six-character limit on the
ITS file system on their DEC
PDP-10
Digital Equipment Corporation (DEC)'s PDP-10, later marketed as the DECsystem-10, is a mainframe computer family manufactured beginning in 1966 and discontinued in 1983. 1970s models and beyond were marketed under the DECsystem-10 name, especi ...
. They soon concluded Actors were essentially closures that never return but instead invoke a
continuation, and thus they decided that the closure and the Actor were, for the purposes of their investigation, essentially identical concepts. They eliminated what they regarded as redundant code and, at that point, discovered that they had written a very small and capable dialect of Lisp. Hewitt remained critical of the "hairy control structure" in Scheme and considered primitives (e.g.,
START!PROCESS
,
STOP!PROCESS
, and
EVALUATE!UNINTERRUPTIBLY
) used in the Scheme implementation to be a backward step.
25 years later, in 1998, Sussman and Steele reflected that the minimalism of Scheme was not a conscious design goal, but rather the unintended outcome of the design process. "We were actually trying to build something complicated and discovered, serendipitously, that we had accidentally designed something that met all our goals but was much simpler than we had intended... we realized that the lambda calculus—a small, simple formalism—could serve as the core of a powerful and expressive programming language."
On the other hand, Hewitt remained critical of the lambda calculus as a foundation for computation writing "The actual situation is that the λ-calculus is capable of expressing some kinds of sequential and parallel control structures but, in general, not the concurrency expressed in the Actor model. On the other hand, the Actor model is capable of expressing everything in the λ-calculus and more." He has also been critical of aspects of Scheme that derive from the lambda calculus such as reliance on continuation functions and the lack of exceptions.
The Lambda Papers
Between 1975 and 1980 Sussman and Steele worked on developing their ideas about using the lambda calculus, continuations and other advanced programming concepts such as optimization of
tail recursion, and published them in a series of
AI Memo
AI is artificial intelligence, intellectual ability in machines and robots.
Ai, AI or A.I. may also refer to:
Animals
* Ai (chimpanzee), an individual experimental subject in Japan
* Ai (sloth) or the pale-throated sloth, northern Amazonian ma ...
s which have become collectively termed the ''Lambda Papers''.
List of papers
* 1975: Scheme: An Interpreter for Extended Lambda Calculus
* 1976: Lambda: The Ultimate Imperative
* 1976: Lambda: The Ultimate Declarative
* 1977: Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO
* 1978: The Art of the Interpreter or, the Modularity Complex (Parts Zero, One, and Two)
* 1978: RABBIT: A Compiler for SCHEME
* 1979: Design of LISP-based Processors, or SCHEME: A Dialect of LISP, or Finite Memories Considered Harmful, or LAMBDA: The Ultimate Opcode
* 1980: Compiler Optimization Based on Viewing LAMBDA as RENAME + GOTO
* 1980: Design of a Lisp-based Processor
Influence
Scheme was the first dialect of Lisp to choose
lexical scope. It was also one of the first programming languages after Reynold's Definitional Language to support
first-class continuations. It had a large impact on the effort that led to the development of its sister-language,
Common Lisp
Common Lisp (CL) is a dialect of the Lisp programming language, published in ANSI standard document ''ANSI INCITS 226-1994 (S20018)'' (formerly ''X3.226-1994 (R1999)''). The Common Lisp HyperSpec, a hyperlinked HTML version, has been derived fro ...
, to which Guy Steele was a contributor.
Standardization
The Scheme language is
standardized in the official
Institute of Electrical and Electronics Engineers
The Institute of Electrical and Electronics Engineers (IEEE) is a 501(c)(3) professional association for electronic engineering and electrical engineering (and associated disciplines) with its corporate office in New York City and its operation ...
(IEEE) standard,
[1178-1990 (R1995) IEEE Standard for the Scheme Programming Language] and a de facto standard called the ''Revised
n Report on the Algorithmic Language Scheme'' (R''n''RS). The most widely implemented standard is ''R5RS'' (1998),
and a new standard, ''R6RS'',
was ratified in 2007.
Besides the RnRS standards there are also
Scheme Requests for Implementation documents, that contain additional libraries that may be added by Scheme implementations.
Timeline
References
{{DEFAULTSORT:History Of The Scheme Programming Language
Scheme programming language
Scheme is a dialect of the Lisp family of programming languages. Scheme was created during the 1970s at the MIT AI Lab and released by its developers, Guy L. Steele and Gerald Jay Sussman, via a series of memos now known as the Lambda Papers. It ...
Scheme (programming language)