Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

History of the Scheme programming language

From Wikipedia, the free encyclopedia

The history of the programming languageScheme begins with the development of earlier members of theLisp family of languages during the second half of the twentieth century. During the design and development period of Scheme, language designersGuy L. Steele andGerald Jay Sussman released an influential series ofMassachusetts Institute of Technology (MIT)AI Memos known as theLambda Papers (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.[1]

Prehistory

[edit]
[icon]
This sectionneeds expansion. You can help byadding missing information.(January 2011)

The development of Scheme was heavily influenced by two predecessors that were quite different from one another:Lisp provided its general semantics and syntax, andALGOL provided itslexical 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. Scheme falls within the large Lisp family of languages that includes Common Lisp, Scheme, ISLisp, EuLisp, XLisp, and AutoLisp.

Lisp

[edit]
Further information:Lisp (programming language)

Lisp was invented byJohn McCarthy in 1958 while he was at theMassachusetts Institute of Technology (MIT). McCarthy published its design in a paper inCommunications of the ACM in 1960, entitled "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I"[2] (Part II was never published). He showed that with a few simple operators and a notation for functions, one can build aTuring-complete language for algorithms.

The use ofs-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-expressions". As an example, the m-expressioncar[cons[A,B]] is equivalent to the s-expression(car (cons A B)). S-expressions proved popular, however, and the many attempts to implement m-expressions failed to catch on.

The first implementation of Lisp was on anIBM 704 bySteve Russell, who read McCarthy's paper and coded the eval function he described in machine code. The familiar (but puzzling to newcomers) namesCAR and CDR used in Lisp to describe the head element of a list and its tail, evolved from twoIBM 704 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 a36-bit IBM 704 instructionword.

The first complete Lisp compiler, written in Lisp, was implemented in 1962 by Tim Hart and Mike Levin at MIT.[3] 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[4] developed by McCarthy and others, andMaclisp[5] – developed for MIT'sProject MAC, a direct descendant of LISP 1.5. which ran on the PDP-10 andMultics systems.

Since its inception, Lisp was closely connected with theartificial intelligence (AI) research community, especially onPDP-10. The 36-bit word size of thePDP-6 andPDP-10 was influenced by the usefulness of having two Lisp18-bit pointers in one word.[6]

ALGOL

[edit]
Further information: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 atETH Zurich.ALGOL 60, a later revision developed at the ALGOL 60 meeting in Paris and now commonly namedALGOL, 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 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."[7]

ALGOL introduced the use of block structure and lexical scope. It was also notorious for its difficultcall 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 athunk, 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

[edit]
See also:Actor model,Planner (programming language), andMDL (programming language)

In 1971 Sussman,Drew McDermott, andEugene Charniak had developed a system calledMicro-Planner which was a partial and somewhat unsatisfactory implementation ofCarl Hewitt's ambitiousPlanner project. Sussman and Hewitt worked together along with others on Muddle, later renamedMDL, an extended Lisp which formed a component of Hewitt's project. Drew McDermott, and Sussman in 1972 developed the Lisp-based languageConniver, 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 remarked: "Their [Sussman and McDermott] solution, to give the user access to the implementation primitives of Planner, is however, something of a retrograde step (what are Conniver's semantics?)"[8]

In November 1972, Hewitt and his students invented theActor model of computation as a solution to the problems with Planner.[9] 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 onMaclisp, to understand the model better. Using this basis they then began to develop mechanisms for creating actors and sending messages.[10]

PLASMA's use of lexical scope was similar to thelambda calculus. 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 theITS file system on their DECPDP-10. They soon concluded Actors were essentially closures that never return but instead invoke acontinuation, 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[11][12] and considered primitives (e.g.,START!PROCESS,STOP!PROCESS, andEVALUATE!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."[10]

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.[13]

The Lambda Papers

[edit]

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 oftail recursion, and published them in a series ofAI Memos which have become collectively termed theLambda Papers.[14]

List of papers

[edit]
  • 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

[edit]

Scheme was the first dialect of Lisp to chooselexical scope. It was also one of the first programming languages after Reynold's Definitional Language[15] to supportfirst-classcontinuations. It had a large impact on the effort that led to the development of its sister-language,Common Lisp, to which Guy Steele was a contributor.[16]

Standardization

[edit]

The Scheme language isstandardized in the officialInstitute of Electrical and Electronics Engineers (IEEE) standard,[17] and a de facto standard called theRevisedn Report on the Algorithmic Language Scheme (RnRS). The most widely implemented standard isR5RS (1998),[18] and a new standard,R6RS,[19] was ratified in 2007.[20] Besides the RnRS standards there are alsoScheme Requests for Implementation documents, that contain additional libraries that may be added by Scheme implementations.

Timeline

[edit]
Timeline of Lisp dialects
19581960196519701975198019851990199520002005201020152020
 LISP 1, 1.5,LISP 2(abandoned)
 Maclisp
 Interlisp
 MDL
 Lisp Machine Lisp
 Scheme R5RS R6RS R7RS small
 NIL
 ZIL (Zork Implementation Language)
 Franz Lisp
 muLisp
 Common Lisp ANSI standard
 Le Lisp
 MIT Scheme
 XLISP
 T
 Chez Scheme
 Emacs Lisp
 AutoLISP
 PicoLisp
 Gambit
 EuLisp
 ISLISP
 OpenLisp
 PLT Scheme Racket
 newLISP
 GNU Guile
 Visual LISP
 Clojure
 Arc
 LFE
 Hy

References

[edit]
  1. ^Steele, Guy (2006)."History of Scheme"(PDF).Sun Microsystems Laboratories. Archived from the original on 2023-03-02. Retrieved2023-04-05.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  2. ^McCarthy, John."Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I". Archived fromthe original on 2013-10-04. Retrieved2006-10-13.
  3. ^Hart, Tim; Levin, Mike."AI Memo 39, The New Compiler"(PDF). Archived fromthe original(PDF) on 2017-07-06. Retrieved2006-10-13.
  4. ^McCarthy, John; Abrahams, Paul W.; Edwards, Daniel J.; Hart, Timothy P.; Levin, Michael I. (1985).LISP 1.5 Programmer's Manual.MIT Press.ISBN 978-0-262-13011-0.
  5. ^"Maclisp Reference Manual". March 3, 1979. Archived fromthe original on 2007-12-14.
  6. ^Hurley, Peter J. (18 October 1990)."The History of TOPS or Life in the Fast ACs".Newsgroupalt.folklore.computers.Usenet: 84950@tut.cis.ohio-state.edu.The PDP-6 project started in early 1963, as a24-bit machine. It grew to 36 bits for LISP, a design goal.
  7. ^Hoare, Tony (December 1973).Hints on Programming Language Design(PDF). p. 27. (This statement is sometimes erroneously attributed toEdsger W. Dijkstra, also involved in implementing the first ALGOL 60compiler.)
  8. ^Hayes, Pat (1974). "Some Problems and Non-Problems in Representation Theory".Society for the Study of Artificial Intelligence and the Simulation of Behaviour.
  9. ^Hewitt, Carl; Bishop, Peter; Steiger, Richard (1973). "A Universal Modular Actor Formalism for Artificial Intelligence". IJCAI.{{cite journal}}:Cite journal requires|journal= (help)
  10. ^abSussman, Gerald Jay;Steele Jr., Guy L. (December 1998)."The First Report on Scheme Revisited"(PDF).Higher-Order and Symbolic Computation.11 (4):399–404.doi:10.1023/A:1010079421970.ISSN 1388-3690.S2CID 7704398. Archived fromthe original(PDF) on 2006-06-15. Retrieved2006-06-19.
  11. ^Hewitt, Carl (December 1976). "Viewing Control Structures as Patterns of Passing Messages".AI Memo 410.
  12. ^Hewitt, Carl (June 1977). "Viewing Control Structures as Patterns of Passing Messages".Journal of Artificial Intelligence.8 (3):323–364.doi:10.1016/0004-3702(77)90033-9.hdl:1721.1/6272.
  13. ^Hewitt, Carl (2009). "ActorScript: Industrial strength integration of local and nonlocal concurrency for Client-cloud Computing".arXiv:0907.3330 [cs.PL].
  14. ^"Online version of the Lambda Papers".scheme.org. 2025. Retrieved2025-12-04.
  15. ^Reynolds, John (1972). "Definitional interpreters for higher order programming languages".ACM Conference Proceedings. Association for Computing Machinery.
  16. ^"Common Lisp Hyperspec – 1.1.2 History".LispWorks. 2005. Retrieved2018-12-02.
  17. ^1178-1990 (R1995) IEEE Standard for the Scheme Programming Language
  18. ^Kelsey, Richard; Clinger, William; Rees, Jonathan; et al. (August 1998)."Revised5 Report on the Algorithmic Language Scheme".Higher-Order and Symbolic Computation.11 (1):7–105.doi:10.1023/A:1010051815785.
  19. ^Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; Findler, Robby; Matthews, Jacob (August 2009)."Revised6 Report on the Algorithmic Language Scheme".Journal of Functional Programming.19 (S1):1–301.CiteSeerX 10.1.1.154.5197.doi:10.1017/S0956796809990074.S2CID 62724224.
  20. ^"R6RS ratification-voting results".
Features
Object systems
Implementations
Standardized
Common
Lisp
Scheme
ISLISP
Unstandardized
Logo
POP
Operating system
Hardware
Community
of practice
Technical standards
Education
Books
Curriculum
Organizations
Business
Education
People
Common
Lisp
Scheme
Logo
POP
Retrieved from "https://en.wikipedia.org/w/index.php?title=History_of_the_Scheme_programming_language&oldid=1325692085"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2026 Movatter.jp