1105 lines
37 KiB
HTML
1105 lines
37 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
"http://www.w3.org/TR/html4/loose.dtd"><!-- DO NOT EDIT THIS FILE-->
|
|
<!-- Edit the .tex version instead-->
|
|
|
|
<html>
|
|
<head>
|
|
<title>R6RS Status Report</title>
|
|
<link href="status.css" rel="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
|
|
|
|
|
|
|
|
<h1>R6RS Status Report</h1>
|
|
<h2>Kent Dybvig, Will Clinger, Matthew Flatt, Mike Sperber, and Anton van Straaten</h2>
|
|
<h3>June 21, 2006</h3>
|
|
|
|
|
|
<p>
|
|
|
|
|
|
<p>
|
|
|
|
<table cellpadding=0 cellspacing=0>
|
|
|
|
|
|
|
|
<tr><td align="right"><b>1. </b><td><b><a class=plain href="./status-jun06.html#g0">Overview<a name="sec:overview"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td align="right"><b>2. </b><td><b><a class=plain href="./status-jun06.html#g1">Change Log</a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td align="right"><b>3. </b><td><b><a class=plain href="./status-jun06.html#g2">Guiding Principles<a name="sec:principles"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td align="right"><b>4. </b><td><b><a class=plain href="./status-jun06.html#g3">Decisions<a name="sec:decisions"></a></a></b></td></tr>
|
|
|
|
|
|
<tr><td></td><td><table cellpadding=0 cellspacing=0>
|
|
<tr><td><b>4.1. </b></td><td><b><a class=plain href="./status-jun06.html#g4">Language structure<a name="sec:languagestructure"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>4.2. </b></td><td><b><a class=plain href="./status-jun06.html#g5">Programs<a name="sec:programs"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>4.3. </b></td><td><b><a class=plain href="./status-jun06.html#g6">Features eliminated<a name="sec:eliminated"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>4.4. </b></td><td><b><a class=plain href="./status-jun06.html#g7">Changes<a name="sec:changes"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>4.5. </b></td><td><b><a class=plain href="./status-jun06.html#g8">Features added<a name="sec:featuresadded"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>4.6. </b></td><td><b><a class=plain href="./status-jun06.html#g9">Features to be added<a name="sec:featurestobeadded"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>4.7. </b></td><td><b><a class=plain href="./status-jun06.html#g10">Reaffirmations<a name="sec:reaffirmations"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>4.8. </b></td><td><b><a class=plain href="./status-jun06.html#g11">Beyond R<sup>6</sup>RS<a name="sec:beyond"></a></a></b></td></tr>
|
|
|
|
|
|
</table></td></tr>
|
|
<tr><td align="right"><b>5. </b><td><b><a class=plain href="./status-jun06.html#g12">Mutability of pairs<a name="sec:pairmutability"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td align="right"><b>6. </b><td><b><a class=plain href="./status-jun06.html#g13">Reference implementations <a name="sec:refimpl"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td align="right"><b>7. </b><td><b><a class=plain href="./status-jun06.html#g14">Work in Progress<a name="sec:workinprogres"></a></a></b></td></tr>
|
|
|
|
|
|
<tr><td></td><td><table cellpadding=0 cellspacing=0>
|
|
<tr><td><b>7.1. </b></td><td><b><a class=plain href="./status-jun06.html#g15">Libraries<a name="progress:libraries"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>7.2. </b></td><td><b><a class=plain href="./status-jun06.html#g16">Records<a name="progress:records"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>7.3. </b></td><td><b><a class=plain href="./status-jun06.html#g17">Unicode<a name="progress:unicode"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>7.4. </b></td><td><b><a class=plain href="./status-jun06.html#g18">Arithmetic<a name="progress:arithmetic"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>7.5. </b></td><td><b><a class=plain href="./status-jun06.html#g19">Exceptions<a name="progress:exceptions"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>7.6. </b></td><td><b><a class=plain href="./status-jun06.html#g20">I/O<a name="progress:io"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>7.7. </b></td><td><b><a class=plain href="./status-jun06.html#g21">Macros<a name="progress:macros"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>7.8. </b></td><td><b><a class=plain href="./status-jun06.html#g22">Binary block datatype<a name="progress:bytes"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
<tr><td><b>7.9. </b></td><td><b><a class=plain href="./status-jun06.html#g23">Other possible changes<a name="progress:miscellaneous"></a></a></b></td></tr>
|
|
|
|
|
|
</table></td></tr>
|
|
<tr><td align="right"><b>8. </b><td><b><a class=plain href="./status-jun06.html#g24">Completion Process<a name="sec:process"></a></a></b></td></tr>
|
|
|
|
|
|
|
|
|
|
</table>
|
|
|
|
|
|
<p>
|
|
|
|
<a name="g0"></a>
|
|
|
|
|
|
<h3><a name="./status-jun06:h0"></a>1. Overview<a name="sec:overview"></a></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
This status report describes the current state of the R<sup>6</sup>RS
|
|
standardization effort.
|
|
It covers principles we have outlined to guide the effort,
|
|
decisions we have made to date, our work in progress, and the process
|
|
by which we intend to complete the Revised<sup>6</sup> Report on Scheme.
|
|
|
|
<p>
|
|
|
|
<a name="g1"></a>
|
|
|
|
|
|
<h3><a name="./status-jun06:h1"></a>2. Change Log</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
Here is a brief overview of the important changes to this document since
|
|
the <a class=ref href="status-feb06.html">February 2006</a> version.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g4">4.1</a> provides some examples of libraries
|
|
we believe might be required by R<sup>6</sup>RS.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g5">4.2</a> (new): describes the forms which portable
|
|
code can take.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g6">4.3</a>: now lists <tt>interaction-environment</tt>,
|
|
top-level definitions, and top-level expressions among the eliminated
|
|
features.
|
|
It also lists <tt>scheme-report-environment</tt>,
|
|
<tt>null-environment</tt> <tt>quotient</tt>, <tt>remainder</tt>, and
|
|
<tt>modulo</tt> among those that have been relegated to an R<sup>5</sup>RS
|
|
compatibility library.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g7">4.4</a> lists several additional changes.
|
|
(All but the first four listed are new.)
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g8">4.5</a> lists several added features.
|
|
(All but the first six listed are new.)
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g9">4.6</a> lists two new features to be
|
|
added: scripts and a byte-vector datatype.
|
|
Read/write invariance is now covered in Section <a href="./status-jun06.html#g7">4.4</a>.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g10">4.7</a> lists several newly reaffirmed features.
|
|
(All but the first three listed are new.)
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g11">4.8</a> lists several features that are officially
|
|
not under consideration for R<sup>6</sup>RS.
|
|
(All but the first four listed are new.)
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g12">5</a> announces that the editors have decided
|
|
to reconsider whether to make pairs immutable and may even consider
|
|
whether to require that the second argument of <tt>cons</tt> be a list.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g13">6</a> (new) describes the editors' commitment to provide
|
|
reference implementations for the major subsystems included in R<sup>6</sup>RS.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g16">7.2</a> documents that we have now withdrawn the
|
|
record SRFI as planned, after receiving valuable community input, and that
|
|
support for records will be based on this SRFI.
|
|
It also describes decisions we have made regarding some issues left
|
|
open by the SRFI.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g17">7.3</a> documents that we have now withdrawn the
|
|
Unicode SRFI as planned, after receiving valuable community input, and
|
|
that support for Unicode will be based on this SRFI.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g18">7.4</a> documents that the arithmetic SRFI
|
|
has undergone revisions.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g19">7.5</a> documents that we have decided to base the
|
|
R<sup>6</sup>RS exception system on
|
|
SRFI's <a class=ref href="http://srfi.schemers.org/srfi-34/">34</a>
|
|
and <a class=ref href="http://srfi.schemers.org/srfi-35/">35</a>.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g20">7.6</a> documents that we have decided to base the
|
|
R<sup>6</sup>RS I/O system on
|
|
SRFI's <a class=ref href="http://srfi.schemers.org/srfi-79/">79</a>
|
|
and <a class=ref href="http://srfi.schemers.org/srfi-81/">81</a>.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g22">7.8</a> (new) documents that we have decided to
|
|
base R<sup>6</sup>RS byte vectors on
|
|
<a class=ref href="http://srfi.schemers.org/srfi-74/">SRFI 74</a>.
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g23">7.9</a> now lists enumerations and
|
|
<tt>eval</tt> among possible features and changes.
|
|
Some of the previously listed items are no longer under consideration
|
|
and are now listed as "beyond R<sup>6</sup>RS" in Section <a href="./status-jun06.html#g11">4.8</a>:
|
|
|
|
<p>
|
|
<ul>
|
|
<li>external representation for (possibly cyclic) graph structures
|
|
<li>syntax for the eof-object, if any
|
|
<li><tt>cond-expand</tt>
|
|
<li>homogeneous numeric vectors
|
|
<li>support for regular expressions
|
|
<li>formatted output
|
|
<li>adding support for weak pointers
|
|
<li>support for gensyms and uids
|
|
</ul>
|
|
|
|
<p>
|
|
One is now mentioned in Section <a href="./status-jun06.html#g4">4.1</a>:
|
|
|
|
<p>
|
|
<ul>
|
|
<li>R<sup>5</sup>RS compatibility library
|
|
</ul>
|
|
|
|
<p>
|
|
One is now mentioned in Section <a href="./status-jun06.html#g10">4.7</a>:
|
|
|
|
<p>
|
|
<ul>
|
|
<li>making quotation of empty list optional (reaffirmed that
|
|
<tt>()</tt> is not a valid expression)
|
|
</ul>
|
|
|
|
<p>
|
|
Some are listed as changes to be made, features added, or features to be added:
|
|
|
|
<p>
|
|
<ul>
|
|
<li><tt>#t</tt>, <tt>#f</tt>, and characters must be followed by a delimiter
|
|
(Section <a href="./status-jun06.html#g7">4.4</a>)
|
|
<li><tt>case-lambda</tt>
|
|
(Section <a href="./status-jun06.html#g8">4.5</a>)
|
|
<li>bitwise operations on exact integers
|
|
(Section <a href="./status-jun06.html#g18">7.4</a>)
|
|
<li>adding a void object to replace the "unspecified value"
|
|
(as "unspecified" rather than "void";
|
|
Sections <a href="./status-jun06.html#g7">4.4</a> and <a href="./status-jun06.html#g8">4.5</a>)
|
|
<li><tt>let-values</tt> or other multiple-value binding construct(s)
|
|
(both <tt>let-values</tt> and <tt>let*-values</tt>;
|
|
Section <a href="./status-jun06.html#g8">4.5</a>)
|
|
</ul>
|
|
|
|
<p>
|
|
Section <a href="./status-jun06.html#g24">8</a> now lists Sperber and Clinger as the editors
|
|
in charge of byte vectors.
|
|
|
|
<p>
|
|
|
|
<a name="g2"></a>
|
|
|
|
|
|
<h3><a name="./status-jun06:h2"></a>3. Guiding Principles<a name="sec:principles"></a></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
To help guide the standardization effort, the editors have adopted a
|
|
set of principles, presented below.
|
|
They are, like R<sup>6</sup>RS itself, a work in progress and still subject
|
|
to change.
|
|
|
|
<p>
|
|
Like R<sup>5</sup>RS Scheme, R<sup>6</sup>RS Scheme should:
|
|
|
|
<p>
|
|
<ul>
|
|
<li>derive its power from simplicity, a small number of generally
|
|
useful core syntactic forms and procedures, and no unnecessary
|
|
restrictions on how they are composed;
|
|
|
|
<p>
|
|
<li>allow programs to define new procedures and new hygienic
|
|
syntactic forms;
|
|
|
|
<p>
|
|
<li>support the traditional s-expression representation of program
|
|
source code as data;
|
|
|
|
<p>
|
|
<li>make procedure calls powerful enough to express any form of
|
|
sequential control, and allow programs to perform non-local control
|
|
operations without the use of global program transformations;
|
|
|
|
<p>
|
|
<li>allow interesting, purely functional programs to run indefinitely
|
|
without terminating or running out of memory on finite-memory
|
|
machines;
|
|
|
|
<p>
|
|
<li>allow educators to use the language to teach programming
|
|
effectively, at various levels and with a variety of pedagogical
|
|
approaches;
|
|
and
|
|
|
|
<p>
|
|
<li>allow researchers to use the language to explore the design,
|
|
implementation, and semantics of programming languages.
|
|
</ul>
|
|
|
|
<p>
|
|
In addition, R<sup>6</sup>RS Scheme should:
|
|
|
|
<p>
|
|
<ul>
|
|
<li>allow programmers to create and distribute substantial
|
|
programs and libraries, e.g., SRFI implementations, that run
|
|
without modification in a variety of Scheme implementations;
|
|
|
|
<p>
|
|
<li>support procedural, syntactic, and data abstraction more fully
|
|
by allowing programs to define hygiene-bending and hygiene-breaking
|
|
syntactic abstractions and new unique datatypes along with
|
|
procedures and hygienic macros in any scope;
|
|
|
|
<p>
|
|
<li>allow programmers to rely on a level of automatic run-time type
|
|
and bounds checking sufficient to ensure type safety while also
|
|
providing a standard way to declare whether such checks are
|
|
desired;
|
|
and
|
|
|
|
<p>
|
|
<li>allow implementations to generate efficient code, without requiring
|
|
programmers to use implementation-specific operators or
|
|
declarations.
|
|
</ul>
|
|
|
|
<p>
|
|
In general, R<sup>6</sup>RS should include building blocks that allow a wide
|
|
variety of libraries to be written, include commonly used user-level
|
|
features to enhance portability and readability of library and application
|
|
code, and exclude features that are less commonly used and easily
|
|
implemented in separate libraries.
|
|
|
|
<p>
|
|
R<sup>6</sup>RS Scheme should also be backward compatible with programs
|
|
written in R<sup>5</sup>RS Scheme to the extent possible without compromising
|
|
the above principles and future viability of the language.
|
|
With respect to future viability, we operate under the assumption that
|
|
many more Scheme programs will be written in the future than exist in
|
|
the present, so the future programs are those with which we must be
|
|
most concerned.
|
|
|
|
<p>
|
|
|
|
<a name="g3"></a>
|
|
|
|
|
|
<h3><a name="./status-jun06:h3"></a>4. Decisions<a name="sec:decisions"></a></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
This section outlines the decisions made to date.
|
|
|
|
<p>
|
|
|
|
<a name="g4"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h4"></a>4.1. Language structure<a name="sec:languagestructure"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
The R<sup>6</sup>RS language consists of a core language and a set of additional
|
|
libraries.
|
|
The exact composition of the core language is expected to fluctuate as
|
|
other features of R6RS are finalized.
|
|
|
|
<p>
|
|
Some examples of the kind of libraries which R6RS might specify are as
|
|
follows:
|
|
|
|
<p>
|
|
<ul>
|
|
<li>arithmetic-fixnum: Procedures specific to fixnums (see Section <a href="./status-jun06.html#g18">7.4</a>)
|
|
<li>arithmetic-flonum: Procedures specific to flonums (see Section <a href="./status-jun06.html#g18">7.4</a>)
|
|
<li>records-procedural: The procedural API to the record mechanism (see Section <a href="./status-jun06.html#g16">7.2</a>)
|
|
<li>records-reflection: The reflection procedures for the record mechanism (see Section <a href="./status-jun06.html#g16">7.2</a>)
|
|
<li>hash-tables: Hash tables (see Section <a href="./status-jun06.html#g9">4.6</a>)
|
|
<li>promises: <tt>delay</tt> and <tt>force</tt>
|
|
<li>eval: The <tt>eval</tt> procedure, along with necessary support procedures.
|
|
<li>r5rs: R<sup>5</sup>RS compatibility
|
|
</ul>
|
|
|
|
|
|
<p>
|
|
|
|
<a name="g5"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h5"></a>4.2. Programs<a name="sec:programs"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
R<sup>6</sup>RS programs exist only in the form of libraries and scripts.
|
|
A library consists of a single top-level library form.
|
|
Libraries may import variable and keyword bindings from other
|
|
libraries (standard or user-defined) and may export variable and keyword
|
|
bindings.
|
|
A script consists of a standard script header and a single
|
|
top-level library.
|
|
All definitions and expressions must appear within a library form;
|
|
R<sup>6</sup>RS has no notion of a top-level definition or expression.
|
|
The <tt>eval</tt> procedure will likely, however, allow the
|
|
evaluation of an expression (but not a definition) within the scope of a
|
|
specified set of library bindings.
|
|
|
|
<p>
|
|
|
|
<a name="g6"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h6"></a>4.3. Features eliminated<a name="sec:eliminated"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
The following features of R<sup>5</sup>RS have been eliminated.
|
|
|
|
<p>
|
|
<ul>
|
|
<li><tt>transcript-on</tt> and <tt>transcript-off</tt>
|
|
<li><tt>interaction-environment</tt>
|
|
<li>top-level definitions and expressions (see Section <a href="./status-jun06.html#g5">4.2</a>)
|
|
</ul>
|
|
|
|
<p>
|
|
The following features of R<sup>5</sup>RS are deprecated but will be available in
|
|
an R<sup>5</sup>RS compatibility library:
|
|
|
|
<p>
|
|
<ul>
|
|
<li><tt>scheme-report-environment</tt>
|
|
<li><tt>null-environment</tt>
|
|
<li><tt>quotient</tt>, <tt>remainder</tt>, <tt>modulo</tt>
|
|
(see <a class=ref href="http://srfi.schemers.org/srfi-77/">SRFI 77</a>
|
|
for replacements)
|
|
</ul>
|
|
|
|
<p>
|
|
|
|
<a name="g7"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h7"></a>4.4. Changes<a name="sec:changes"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
The following syntactic and semantic changes have been made to existing
|
|
features.
|
|
|
|
<p>
|
|
<ul>
|
|
<li>Syntax is case sensitive.
|
|
<li>Internal defines now follow <tt>letrec*</tt> semantics.
|
|
<li>There is now a single unique end-of-file object.
|
|
<li>Continuations created by <tt>begin</tt> must accept any number
|
|
of values. (This was optional in R<sup>5</sup>RS.)
|
|
<li>Any character or boolean must be followed by a delimiter.
|
|
<li>The new syntax <tt>#!r6rs</tt> is treated as a declaration that
|
|
a source library or script contains only r6rs-compatible
|
|
lexical constructs.
|
|
It is otherwise treated as a comment by the reader.
|
|
<li>An implementation may or may not signal an error when
|
|
it sees <tt>#!<i>symbol</i></tt>, for any symbol <tt><i>symbol</i></tt>
|
|
that is not <tt>r6rs</tt>.
|
|
Implementations are encouraged to use specific
|
|
<tt>#!</tt>-prefixed symbols as flags that subsequent input
|
|
contains extensions to the standard lexical syntax.
|
|
<li>All other lexical errors must be signaled, effectively
|
|
ruling out any implementation-dependent extensions unless
|
|
identified by a <tt>#!</tt>-prefixed symbol.
|
|
<li>Expressions that would have evaluated to some "unspecified value"
|
|
in R<sup>5</sup>RS evaluate to a new unique (in the sense of <tt>eq?</tt>)
|
|
"unspecified" value.
|
|
<li>Character and string comparison routines are now n-ary.
|
|
(This was optional in R<sup>5</sup>RS.)
|
|
<li>The <tt><i>in</i></tt> and <tt><i>out</i></tt> thunks of a <tt>dynamic-wind</tt> are
|
|
considered "outside" of the <tt>dynamic-wind</tt>; that is,
|
|
escaping from either does not cause the <tt><i>out</i></tt> thunk to be invoked,
|
|
and jumping back in does not cause the <tt><i>in</i></tt> thunk to be invoked.
|
|
<li>Most standard procedures are required to raise an exception with a
|
|
specific condition (in the default "safe" mode) when given
|
|
invalid inputs, except in certain specific cases where the answer
|
|
can be determined in spite of the invalid input and the additional
|
|
work involved may be extraordinary.
|
|
For example, <tt>map</tt> must raise an exception if its first argument
|
|
is not a procedure or if its other arguments are not (proper) lists
|
|
of the same length.
|
|
On the other hand, <tt>(memq <i>x</i> <i>ls</i>)</tt> must raise an
|
|
exception if and only if, before it finds a tail of <tt><i>ls</i></tt> whose
|
|
car is eq? to <tt><i>x</i></tt>, it encounters a non-list tail or cycle in
|
|
<tt><i>ls</i></tt>.
|
|
<li>When given a value <tt><i>x</i></tt> that can be represented as a datum,
|
|
<tt>write</tt> must print <tt><i>x</i></tt> as a datum for which
|
|
<tt>read</tt> would produce a value that is equivalent (in the
|
|
sense of equal?) to <tt><i>x</i></tt> (read/write invariance).
|
|
When given a value <tt><i>x</i></tt> that cannot be represented as a datum,
|
|
the behavior of <tt>write</tt> is unspecified.
|
|
<li>Every symbol, string, and character that can be created via
|
|
standard operators has at least one standard representation
|
|
as a datum.
|
|
In most implementations, this will also be true of numbers.
|
|
<li>The <tt>equal?</tt> predicate now terminates for all inputs, following
|
|
the semantics of <tt>equiv?</tt> in
|
|
<a class=ref href="http://srfi.schemers.org/srfi-85/">SRFI 85</a>.
|
|
</ul>
|
|
|
|
<p>
|
|
|
|
<a name="g8"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h8"></a>4.5. Features added<a name="sec:featuresadded"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
The following features have been added:
|
|
|
|
<p>
|
|
<ul>
|
|
<li><tt>letrec*</tt> (<tt>letrec</tt> with left-to-right evaluation order)
|
|
<li>block comments bracketed by <tt>#|</tt> and <tt>|#</tt>
|
|
<li>expression comments prefixed by <tt>#;</tt>
|
|
<li>matched square brackets ("<tt>[</tt>" and "<tt>]</tt>");
|
|
equivalent to matched parentheses for list data and
|
|
list-structured forms
|
|
<li>symbols of the form <tt>-></tt><tt><i>subsequent</i></tt>* are now allowed
|
|
<li><tt>eof-object</tt> constructor to obtain the end-of-file object
|
|
<li><tt>unspecified</tt> procedure that returns the unspecified value
|
|
<li><tt>let-values</tt> and <tt>let*-values</tt> multiple-value binding forms
|
|
<li><tt>(define var)</tt> syntax: abbreviation for <tt>(define var (unspecified))</tt>
|
|
<li><tt>when</tt> and <tt>unless</tt> syntax
|
|
<li><tt>case-lambda</tt> syntax
|
|
<li><tt>call/cc</tt> as a second name for <tt>call-with-current-continuation</tt>
|
|
<li>new list-processing procedures (mostly inspired by
|
|
<a class=ref href="http://srfi.schemers.org/srfi-1/">SRFI 1</a>):
|
|
<tt>exists</tt>, <tt>forall</tt>,
|
|
<tt>fold-left</tt>, <tt>fold-right</tt>,
|
|
<tt>filter</tt>, <tt>partition</tt>,
|
|
<tt>iota</tt>,
|
|
<tt>find</tt>,
|
|
<tt>remq</tt>, <tt>remv</tt>, <tt>remove</tt>,
|
|
<tt>memp</tt>, <tt>remp</tt>, and <tt>assp</tt>
|
|
(the latter three accept a predicate and a list)
|
|
<li>Unicode support
|
|
</ul>
|
|
|
|
<p>
|
|
|
|
<a name="g9"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h9"></a>4.6. Features to be added<a name="sec:featurestobeadded"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
The following features will be added, but the details have yet to be fully
|
|
worked out.
|
|
|
|
<p>
|
|
<ul>
|
|
<li>top-level libraries
|
|
<li>exception handling
|
|
<li>safe (default) and unsafe modes
|
|
<li><tt>syntax-case</tt> macros
|
|
<li>hash tables (as a library)
|
|
<li>byte-vector datatype and operations
|
|
<li>scripts
|
|
<li>fixnum- and flonum-specific arithmetic
|
|
<li>support for infinities and NaNs
|
|
</ul>
|
|
|
|
<p>
|
|
|
|
<a name="g10"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h10"></a>4.7. Reaffirmations<a name="sec:reaffirmations"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
The following features of R<sup>5</sup>RS are reaffirmed for R<sup>6</sup>RS.
|
|
|
|
<p>
|
|
<ul>
|
|
<li>support for multiple values
|
|
<li>unspecified evaluation order for applications, <tt>let</tt> bindings, and <tt>letrec</tt> bindings
|
|
<li><tt>set-car!</tt> and <tt>set-cdr!</tt> (but see Section <a href="./status-jun06.html#g12">5</a>)
|
|
<li><tt>read-char</tt> and <tt>peek-char</tt> return the eof object
|
|
<li><tt>(begin)</tt> is still an invalid expression
|
|
<li><tt>case</tt> still uses <tt>memv</tt>
|
|
<li>one-armed <tt>if</tt> remains in the language
|
|
<li><tt>append</tt> copies all but last argument, even if last argument is <tt>()</tt>
|
|
<li><tt>()</tt> is still an invalid expression
|
|
<li>the contents of <tt>(make-string <i>n</i>)</tt> and <tt>(make-vector <i>n</i>)</tt>
|
|
remain unspecified (in particular, the elements of
|
|
<tt>(make-vector <i>n</i>)</tt> are not initialized to the new
|
|
"unspecified" value
|
|
</ul>
|
|
|
|
<p>
|
|
|
|
<a name="g11"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h11"></a>4.8. Beyond R<sup>6</sup>RS<a name="sec:beyond"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
The following features are definitely not under consideration for R<sup>6</sup>RS.
|
|
We encourage anyone interested in seeing any of these features in R<sup>7</sup>RS
|
|
to make concrete proposals via the SRFI process.
|
|
|
|
<p>
|
|
<ul>
|
|
<li>processes
|
|
<li>network programming
|
|
<li>object-oriented programming
|
|
<li>box datatype
|
|
<li>formatted output
|
|
<li>graph printing (printed representation for shared structure and cycles)
|
|
<li><tt>rec</tt> form, <tt>(rec id e) => (letrec ([id e]) id)</tt>
|
|
<li>vector-length prefix: <tt>#<i>n</i>(</tt>
|
|
<li>gensyms / uids
|
|
<li>external syntax for the eof object, e.g., <tt>#!eof</tt>
|
|
<li>external syntax for the unspecified value, e.g., <tt>#!unspecified</tt>
|
|
<li><a class=ref href="http://srfi.schemers.org/srfi-0/">SRFI 0</a> <tt>cond-expand</tt>
|
|
<li>homogeneous numeric vectors
|
|
<li>weak pointers
|
|
<li>support for regular expressions
|
|
</ul>
|
|
|
|
<p>
|
|
|
|
<a name="g12"></a>
|
|
|
|
|
|
<h3><a name="./status-jun06:h12"></a>5. Mutability of pairs<a name="sec:pairmutability"></a></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
Although <tt>set-car!</tt> and <tt>set-cdr!</tt> were previously
|
|
reaffirmed (Section <a href="./status-jun06.html#g10">4.7</a>), the editors have decided to
|
|
reconsider whether pairs should be immutable in R<sup>6</sup>RS.
|
|
Members of the Scheme community wishing to weigh in on the issue
|
|
should contact one of the editors.
|
|
|
|
<p>
|
|
Making pairs immutable would simplify argument error checks for some
|
|
list-processing operations, simplify the <tt>list?</tt> predicate, allow
|
|
<tt>apply</tt> not to copy the input list when invoking a procedure with a
|
|
dot interface, and allow program improvers to perform deforestation, i.e.,
|
|
to eliminate some of the intermediate lists allocated when nested mapping,
|
|
reversing, appending and similar operations are used.
|
|
User-defined record types can be used in place of pairs whenever a mutable
|
|
data structure is required.
|
|
|
|
<p>
|
|
On the other hand, making pairs immutable is an incompatible change that
|
|
would break some existing programs, and mutable pairs are natural building
|
|
blocks for various abstractions, like queues and streams.
|
|
|
|
|
|
<p>
|
|
A more radical change is to require that the second argument to
|
|
<tt>cons</tt> be a list, i.e., the empty list or a pair.
|
|
This would make <tt>list?</tt> constant time and further simplify argument
|
|
error checks for some list-processing operations.
|
|
Pairs would become useful only as building blocks for lists, and records
|
|
(or vectors) would have to be used for most other purposes for which pairs
|
|
are currently used.
|
|
|
|
<p>
|
|
|
|
<a name="g13"></a>
|
|
|
|
|
|
<h3><a name="./status-jun06:h13"></a>6. Reference implementations <a name="sec:refimpl"></a></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
The editors will publish, along with the revised report proper,
|
|
nonnormative, portable (with implementation-dependent hooks as necessary),
|
|
and reasonably efficient reference implementations of the major subsystems
|
|
of R<sup>6</sup>RS, including the library, record, Unicode, arithmetic,
|
|
exceptions, I/O, and macro subsystems.
|
|
The editors may publish reference implementations of selected
|
|
additional features as well.
|
|
|
|
<p>
|
|
|
|
<a name="g14"></a>
|
|
|
|
|
|
<h3><a name="./status-jun06:h14"></a>7. Work in Progress<a name="sec:workinprogres"></a></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
Most of the standardization effort is currently focused on several
|
|
subsystems.
|
|
Sections <a href="./status-jun06.html#g15">7.1</a>-<a href="./status-jun06.html#g22">7.8</a> list for
|
|
each subsystem any informal requirements the editors have
|
|
identified, the current status, and open questions.
|
|
|
|
<p>
|
|
In several cases, a subsystem is up for discussion as a SRFI in order to
|
|
give the editors a chance to inform the community of the ongoing work
|
|
and obtain valuable feedback from the community.
|
|
The final mechanism adopted for R<sup>6</sup>RS may, however, differ in minor
|
|
or significant ways from the published SRFI.
|
|
|
|
<p>
|
|
A list of other items up for consideration is given in
|
|
Section <a href="./status-jun06.html#g23">7.9</a>.
|
|
These have not received as much attention to date, usually because they
|
|
involve less complex or far-reaching changes or are considered to be of
|
|
lower priority.
|
|
|
|
<p>
|
|
|
|
<a name="g15"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h15"></a>7.1. Libraries<a name="progress:libraries"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
Informal requirements:
|
|
support distribution of portable libraries,
|
|
support identification of library location,
|
|
namespace management,
|
|
export/import of macros,
|
|
permit separate but dependent analysis and compilation,
|
|
support generation of efficient compiled code,
|
|
ability to define new libraries.
|
|
|
|
<p>
|
|
Support for libraries is under community discussion via
|
|
<a class=ref href="http://srfi.schemers.org/srfi-83/">SRFI 83</a> (R6RS
|
|
Library Syntax).
|
|
Two big issues have arisen: the need to clarify phases,
|
|
e.g., for compile-time modules that import at
|
|
compile-time, and how library names are written
|
|
(coding as strings is controversial).
|
|
Still up in the air are the extent to which the syntax of
|
|
<tt>import</tt> and <tt>export</tt> forms is tied down,
|
|
what built-in libraries besides <tt>r6rs</tt> there might
|
|
be, and how to support subsetting and supersetting of libraries.
|
|
|
|
<p>
|
|
|
|
<a name="g16"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h16"></a>7.2. Records<a name="progress:records"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
Informal requirements:
|
|
disjoint types,
|
|
syntactic interface,
|
|
mutable fields.
|
|
|
|
<p>
|
|
Support for records will be based on
|
|
<a class=ref href="http://srfi.schemers.org/srfi-76/">SRFI 76</a> (R6RS Records),
|
|
which has now been withdrawn as planned after revisions based in part on
|
|
community input.
|
|
While the SRFI did not fully specify the generativity of ordinary record
|
|
definitions, we have decided that they should be "run-time" generative
|
|
unless declared nongenerative.
|
|
We have also eliminated the restriction
|
|
that the parent of a nongenerative record be a nongenerative record,
|
|
and we decided to keep the "sealed" feature.
|
|
|
|
<p>
|
|
Additionally, we have decided to allow an implementation to treat any or
|
|
all of its built-in types as records, i.e., <tt>record?</tt> may or may
|
|
not return true for an object of a built-in type.
|
|
|
|
|
|
<p>
|
|
|
|
<a name="g17"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h17"></a>7.3. Unicode<a name="progress:unicode"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
Informal requirements:
|
|
provision for Unicode characters and
|
|
character syntax, Unicode strings and string syntax; Unicode
|
|
character I/O; <tt>integer->char</tt> and <tt>char->integer</tt> are inverse
|
|
operations and support Unicode-specific text encodings;
|
|
write/read invariance for every datum, including symbols.
|
|
|
|
<p>
|
|
Support for Unicode will be based on
|
|
<a class=ref href="http://srfi.schemers.org/srfi-75/">SRFI 75</a> (R6RS Unicode
|
|
data), which has now been withdrawn as planned after revisions based in
|
|
part on community input.
|
|
See <a class=ref href="http://srfi.schemers.org/srfi-75/mail-archive/msg00309.html">http://srfi.schemers.org/srfi-75/mail-archive/msg00309.html</a>
|
|
for a discussion of probable differences between the withdrawn
|
|
SRFI and R<sup>6</sup>RS.
|
|
|
|
<p>
|
|
|
|
<a name="g18"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h18"></a>7.4. Arithmetic<a name="progress:arithmetic"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
Informal requirements:
|
|
support for IEEE zeros, infinities, and NaNs,
|
|
clean up behavior of <tt>eqv?</tt> wrt numbers,
|
|
fix certain arithmetic operations,
|
|
transparency.
|
|
|
|
<p>
|
|
Changes for R<sup>6</sup>RS arithmetic, including support for fixnum-specific,
|
|
flonum-specific, and bitwise operators and IEEE arithmetic, are under
|
|
community discussion via
|
|
<a class=ref href="http://srfi.schemers.org/srfi-77/">SRFI 77</a> (Preliminary
|
|
Proposal for R6RS Arithmetic), which has recently been revised based in
|
|
part on community input.
|
|
|
|
<p>
|
|
|
|
<a name="g19"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h19"></a>7.5. Exceptions<a name="progress:exceptions"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
Informal requirements:
|
|
clarify the meaning of "is an error,"
|
|
view exception handling as a means of communication between
|
|
parts of the program.
|
|
|
|
<p>
|
|
The editors have decided to adopt
|
|
<a class=ref href="http://srfi.schemers.org/srfi-34/">SRFI 34</a> (Exception Handling
|
|
for Programs) as the basis for the R<sup>6</sup>RS exception-handling system and
|
|
<a class=ref href="http://srfi.schemers.org/srfi-35/">SRFI 35</a> (Conditions) as the
|
|
basis for the R<sup>6</sup>RS condition system.
|
|
|
|
<p>
|
|
|
|
<a name="g20"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h20"></a>7.6. I/O<a name="progress:io"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
Informal requirements:
|
|
<tt>read-byte</tt> and <tt>write-byte</tt>,
|
|
ports that support binary I/O,
|
|
byte-vector datatype,
|
|
block read/write operations.
|
|
|
|
<p>
|
|
The editors have decided to adopt
|
|
<a class=ref href="http://srfi.schemers.org/srfi-79/">SRFI 79</a> (Primitive I/O) and
|
|
<a class=ref href="http://srfi.schemers.org/srfi-81/">SRFI 81</a> (Port I/O) as the
|
|
basis for the R<sup>6</sup>RS I/O system.
|
|
|
|
<p>
|
|
The byte-vector datatype requirement is addressed by the binary block
|
|
datatype (Section <a href="./status-jun06.html#g22">7.8</a>).
|
|
|
|
<p>
|
|
|
|
<a name="g21"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h21"></a>7.7. Macros<a name="progress:macros"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
Informal requirements:
|
|
specify expansion semantics,
|
|
specify interaction with modules,
|
|
allow procedural transformers,
|
|
hygiene-breaking operations,
|
|
maintain support for syntax-rules.
|
|
|
|
<p>
|
|
The editors have decided to adopt <tt>syntax-case</tt> as currently
|
|
implemented in Chez Scheme and MzScheme, with various differences
|
|
to be worked out by Dybvig and Flatt.
|
|
Also, the underscore identifier ("<tt>_</tt>") will no longer be
|
|
a pattern variable but instead a special identifier that matches
|
|
any input, and underscore will be allowed in place of the keyword
|
|
naming a macro in a <tt>syntax-rules</tt> pattern.
|
|
|
|
<p>
|
|
<a class=ref href="http://srfi.schemers.org/srfi-93/">SRFI 93</a> (R6RS Syntax-Case
|
|
Macros) has recently been submitted.
|
|
|
|
<p>
|
|
|
|
<a name="g22"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h22"></a>7.8. Binary block datatype<a name="progress:bytes"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
The editors have decided to adopt
|
|
<a class=ref href="http://srfi.schemers.org/srfi-74/">SRFI 74</a> (Octet-Addressed
|
|
Binary Blocks) as the basis for byte-vector functionality in R<sup>6</sup>RS,
|
|
with the name <tt>bytes</tt> replaces the name <tt>blob</tt>.
|
|
In contrast with the SRFI, the contents of
|
|
<tt>(make-bytes <i>n</i>)</tt> is unspecified and an
|
|
optional <tt><i>fill</i></tt> argument has been added, as
|
|
with <tt>make-string</tt> and <tt>make-vector</tt>.
|
|
|
|
<p>
|
|
|
|
<a name="g23"></a>
|
|
|
|
|
|
<h4><a name="./status-jun06:h23"></a>7.9. Other possible changes<a name="progress:miscellaneous"></a></h4>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
The following possible features and changes have been discussed without
|
|
resolution.
|
|
|
|
<p>
|
|
<ul>
|
|
<li>improving the semantics of <tt>eqv?</tt> and <tt>equal?</tt>
|
|
<li>support for file operations
|
|
<li>support system operations
|
|
<li>support for enumerations
|
|
<li>changes to <tt>eval</tt> to reflect the existence of libraries and
|
|
other R<sup>6</sup>RS changes
|
|
</ul>
|
|
|
|
<p>
|
|
|
|
<a name="g24"></a>
|
|
|
|
|
|
<h3><a name="./status-jun06:h24"></a>8. Completion Process<a name="sec:process"></a></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
We intend to deliver a draft R<sup>6</sup>RS to the Steering Committee by
|
|
September 1, 2006.
|
|
An initial internal (editors only) draft of R6RS has been created and
|
|
reflects most of the decisions the editors have made to date.
|
|
This draft will be updated as work wraps up on the major subsystems and
|
|
other issues.
|
|
|
|
<p>
|
|
For each of the subsystems, the core/library split, and the safe/unsafe
|
|
mode mechanism and semantics, we have assigned
|
|
a single editor to be responsible for ensuring progress.
|
|
We have also assigned one or more additional editors to help.
|
|
These assignments are shown below.
|
|
|
|
<p>
|
|
<center>
|
|
<TABLE><TR><TD nowrap align="left">
|
|
<b>subsystem</b> </TD><TD nowrap align="left"> <b>primary editor</b> </TD><TD nowrap align="left"> <b>additional editors</b></TD></TR><TR><TD nowrap align="left">
|
|
libraries </TD><TD nowrap align="left"> Flatt </TD><TD nowrap align="left"> Dybvig</TD></TR><TR><TD nowrap align="left">
|
|
records </TD><TD nowrap align="left"> Sperber </TD><TD nowrap align="left"> Dybvig, van Straaten</TD></TR><TR><TD nowrap align="left">
|
|
arithmetic </TD><TD nowrap align="left"> Clinger </TD><TD nowrap align="left"> Sperber</TD></TR><TR><TD nowrap align="left">
|
|
Unicode </TD><TD nowrap align="left"> Flatt </TD><TD nowrap align="left"> Clinger</TD></TR><TR><TD nowrap align="left">
|
|
macros </TD><TD nowrap align="left"> Dybvig </TD><TD nowrap align="left"> Flatt</TD></TR><TR><TD nowrap align="left">
|
|
exceptions </TD><TD nowrap align="left"> Sperber </TD><TD nowrap align="left"> Clinger</TD></TR><TR><TD nowrap align="left">
|
|
I/O </TD><TD nowrap align="left"> Sperber </TD><TD nowrap align="left"> van Straaten</TD></TR><TR><TD nowrap align="left">
|
|
byte vectors </TD><TD nowrap align="left"> Sperber </TD><TD nowrap align="left"> Clinger</TD></TR><TR><TD nowrap align="left">
|
|
core/library split </TD><TD nowrap align="left"> van Straaten </TD><TD nowrap align="left"> Dybvig</TD></TR><TR><TD nowrap align="left">
|
|
hash tables </TD><TD nowrap align="left"> van Straaten </TD><TD nowrap align="left"> Clinger</TD></TR><TR><TD nowrap align="left">
|
|
safe/unsafe mode </TD><TD nowrap align="left"> Clinger </TD><TD nowrap align="left"> Sperber</TD></TR><TR><TD nowrap align="left">
|
|
</TD></TR></TABLE>
|
|
</center>
|
|
|
|
<p>
|
|
At this point, our discussions will be limited mostly to the major
|
|
subsystems and the other possible features and changes described in
|
|
Section <a href="./status-jun06.html#g23">7.9</a>.
|
|
New issues may also be considered if this can be done without
|
|
jeopardizing our goal to submit a draft R<sup>6</sup>RS to the steering
|
|
committee by the target deadline.
|
|
|
|
<p>
|
|
Responsibility for making sure that the editors complete their work and
|
|
communicate effectively lies with the chair (Dybvig) and responsibility
|
|
for completing the R<sup>6</sup>RS draft lies with the project editor (Sperber).
|
|
|
|
<p>
|
|
|
|
|
|
</body>
|
|
</html>
|