Scheme (programming language): Difference between revisions

Content deleted Content added
Add schemers.org in external links as a pertinent reference source
m Omitted references to minimalism in introductory section. Added specific references to the two current standards. Called R5RS a widely implemented standard instead of the most widely implemented. Calling it the most widely implemented would require a more specific and more current reference. The fact that R5RS is widely implemented is well known in the community, as are the terms "small" and "large", I added the reference to R6RS to give it equal standing with R7RS, since both are standards.
Line 23:
}}
 
'''Scheme''' is a [[programming language dialect|dialect]] of the [[Lisp (programming language)|Lisp]] family of [[programming language]]s. Scheme was created during the 1970s at the [[MIT Computer Science and Artificial Intelligence Laboratory|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 was the first dialect of Lisp to choose [[Scope (computer science)#Lexical scoping and dynamic scoping|lexical scope]] and the first to require implementations to perform [[tail-call optimization]], giving stronger support for functional programming and associated techniques such as recursive algorithms. It was also one of the first programming languages to support [[First-class object|first-class]] [[continuation]]s. It had a significant influence on the effort that led to the development of [[Common Lisp]].<ref name="cl_steele">Common LISP: The Language, 2nd Ed., Guy L. Steele Jr. Digital Press; 1981. {{ISBN|978-1-55558-041-4}}. "Common Lisp is a new dialect of Lisp, a successor to MacLisp, influenced strongly by ZetaLisp and to some extent by Scheme and InterLisp."</ref>
'''Scheme''' is a [[Minimalism (computing)|minimalist]] [[programming language dialect|dialect]] of the [[Lisp (programming language)|Lisp]] family of [[programming language]]s. Scheme consists of a small standard core with several tools for language extension.<ref name="csail">{{cite web|title=The Scheme Programming Language|url=https://groups.csail.mit.edu/mac/projects/scheme/|website=MIT}}</ref>
 
Scheme was created during the 1970s at the [[MIT Computer Science and Artificial Intelligence Laboratory|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 was the first dialect of Lisp to choose [[Scope (computer science)#Lexical scoping and dynamic scoping|lexical scope]] and the first to require implementations to perform [[tail-call optimization]], giving stronger support for functional programming and associated techniques such as recursive algorithms. It was also one of the first programming languages to support [[First-class object|first-class]] [[continuation]]s. It had a significant influence on the effort that led to the development of [[Common Lisp]].<ref name="cl_steele">Common LISP: The Language, 2nd Ed., Guy L. Steele Jr. Digital Press; 1981. {{ISBN|978-1-55558-041-4}}. "Common Lisp is a new dialect of Lisp, a successor to MacLisp, influenced strongly by ZetaLisp and to some extent by Scheme and InterLisp."</ref>
 
The Scheme language is standardized in the official [[Institute of Electrical and Electronics Engineers|IEEE]] standard<ref name="ieee1178">1178-1990 (Reaff 2008) IEEE Standard for the Scheme Programming Language. IEEE part number STDPD14209, [http://standards.ieee.org/board/rev/308minutes.html unanimously reaffirmed] at a meeting of the IEEE-SA Standards Board Standards Review Committee (RevCom), March 26, 2008 (item 6.3 on minutes), reaffirmation minutes accessed October 2009. NOTE: this document is only available for purchase from IEEE and is not available online at the time of writing (2009).</ref> <!--
-->and a ''de facto'' standard called the ''Revised{{padlsup|n}} Report on the Algorithmic Language Scheme'' (R''n''RS). The mostA widely implemented standard is R5RS (1998).<ref name="r5rs">{{cite journal |author=Richard Kelsey |date=August 1998 |title=Revised<sup>5</sup> Report on the Algorithmic Language Scheme |url=http://www.schemers.org/Documents/Standards/R5RS/ |journal=Higher-Order and Symbolic Computation |volume=11 |issue=1 |pages=7–105 |doi=10.1023/A:1010051815785 |access-date=2012-08-09 |author2=William Clinger |author3=Jonathan Rees |display-authors=3 |last4=Rozas |first4=G.J. |last5=Adams Iv |first5=N.I. |last6=Friedman |first6=D.P. |last7=Kohlbecker |first7=E. |last8=Steele Jr. |first8=G.L. |last9=Bartley |first9=D.H.|s2cid=14069423 }}</ref> <!--
-->The most recently ratified standards of Scheme<!--
-->The most recent standard, R7RS,<ref name="r7rs_homepage">{{cite web |url=http://www.r7rs.org |title=Revised<sup>7</sup> Report on the Algorithmic Language Scheme (R7RS) |last1=Shinn |first1=Alex |last2=Cowan |first2=John |last3=Gleckler |first3=Arthur |date=July 2013 |access-date=2020-11-08}}</ref> <!--
-->providesare "small"now and "large"referred versionsto of the Scheme language; theas "small" language standard was ratified in(R7RS, 2013.<ref name="r7rs">{{cite web |url=http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs.pdf |title=R7RS final available |date=2013-07-06}}</ref>) and "large" (R6RS, 2007<ref name="r6rs">{{cite web |last1=Sperber |first1=Michael |last2=Dybvig |first2=R. Kent |last3=Flatt |first3=Matthew |last4=Van Straaten |first4=Anton |display-authors=etal |date=August 2007 |title=Revised<sup>6</sup> Report on the Algorithmic Language Scheme (R6RS) |url=http://www.r6rs.org |access-date=2011-09-13 |publisher=Scheme Steering Committee}}</ref>) .<!--
-->
--> Scheme has a diverse user base due to its compactness and elegance, but its minimalist philosophy has also caused wide divergence between practical implementations, so much that the Scheme Steering Committee calls it "the world's most unportable programming language" and "a ''family'' of dialects" rather than a single language.<ref name="position_paper">{{cite web |publisher=Scheme Steering Committee |author=Will Clinger, Marc Feeley, Chris Hanson, Jonathan Rees and Olin Shivers |url=http://scheme-reports.org/2009/position-statement.html |title=Position Statement ''(draft)'' |date=2009-08-20 |access-date=2012-08-09}}</ref>
 
== History ==
Line 42 ⟶ 40:
A new language standardization process began at the 2003 Scheme workshop, with the goal of producing an R6RS standard in 2006. This process broke with the earlier R''n''RS approach of unanimity.
 
R6RS<ref name="r6rs">{{cite web |url=http://www.r6rs.org |title=Revised<sup>6</sup> Report on the Algorithmic Language Scheme (R6RS) |last1=Sperber |first1=Michael |last2=Dybvig |first2=R. Kent |last3=Flatt |first3=Matthew |last4=Van Straaten |first4=Anton|date=August 2007 |publisher=Scheme Steering Committee |access-date=2011-09-13|display-authors=etal}}</ref> features a standard module system, allowing a split between the core language and libraries. A number of drafts of the R6RS specification were released, the final version being R5.97RS. A successful vote resulted in the ratification of the new standard, announced on August 28, 2007.<ref name="r6rs" />
 
Currently the newest releases of various Scheme implementations<ref name="rs6s_Implementations">{{cite web |url=http://www.r6rs.org/implementations.html |title=R6RS Implementations |publisher=r6rs.org |access-date=2017-11-24}}</ref> support the R6RS standard. There is a portable reference implementation of the proposed implicitly phased libraries for R6RS, called psyntax, which loads and bootstraps itself properly on various older Scheme implementations.<ref name="psyntax">{{cite web |author=Abdulaziz Ghuloum |publisher=Ikarus Scheme |url=https://www.cs.indiana.edu/~aghuloum/r6rs-libraries/ |title=R6RS Libraries and syntax-case system (psyntax) |date=2007-10-27 |access-date=2009-10-20}}</ref>
Line 51 ⟶ 49:
 
===R7RS===
The R6RS standard has caused controversy because itsome issee seenit toas havea departeddeparture from the minimalist philosophy.<ref name="r6rs_electorate">{{cite web |publisher=Scheme Steering Committee |url=http://www.r6rs.org/ratification/electorate.html |title=R6RS Electorate |year=2007 |access-date=2012-08-09}}</ref><ref name="r6rs_feeley">{{cite web |author=Marc Feeley (compilation) |publisher=Scheme Steering Committee, r6rs-discuss mailing list |url=http://lists.r6rs.org/pipermail/r6rs-discuss/2007-October/003351.html |title=Implementors' intentions concerning R6RS |date=2007-10-26 |access-date=2012-08-09}}</ref> In August 2009, the Scheme Steering Committee, which oversees the standardization process, announced its intention to recommend splitting Scheme into two languages: a large modern programming language for programmers; and a small version, a subset of the large version retaining the minimalism praised by educators and casual implementors.<ref name="position_paper">{{cite web |author=Will Clinger, Marc Feeley, Chris Hanson, Jonathan Rees and Olin Shivers |date=2009-08-20 |title=Position Statement ''(draft)'' |url=http://scheme-reports.org/2009/position-statement.html |access-date=2012-08-09 |publisher=Scheme Steering Committee}}</ref> Two working groups were created to work on these two new versions of Scheme. The Scheme Reports Process site has links to the working groups' charters, public discussions and issue tracking system.
 
The ninth draft of R7RS (small language) was made available on April 15, 2013.<ref name="r7rs-draft-9">{{cite web |url=http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs-draft-9.pdf |title=R7RS 9th draft available |date=2013-04-15}}</ref> A vote ratifying this draft closed on May 20, 2013,<ref name="r7rs_clinger">{{cite web |author=Will Clinger |publisher=Scheme Language Steering Committee, scheme-reports mailing list |url=http://lists.scheme-reports.org/pipermail/scheme-reports/2013-May/003401.html |title=extension of voting period |date=2013-05-10 |access-date=2013-07-07 |archive-url=https://web.archive.org/web/20130721162308/http://lists.scheme-reports.org/pipermail/scheme-reports/2013-May/003401.html# |archive-date=2013-07-21 |url-status=dead }}</ref> and the final report has been available since August 6, 2013,<!-- quote= the Scheme Steering Committee decided in August 2009 to divide the standard into two separate but compatible languages – a "small" language, suitable for educators, researchers, and users of embedded languages, focused on R5RS compatibility, and a "large" language focused on the practical needs of mainstream software development, intended to become a replacement for R6RS. The present report --> describing "the 'small' language of that effort: therefore it cannot be considered in isolation as the successor to R6RS".<ref name="r7rs">{{cite web |url=http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs.pdf |title=R7RS final available |date=2013-07-06}}</ref>