schemers-website/www/Documents/Standards/Charter/status-jun-2006/status-jun06.html

1105 lines
37 KiB
HTML
Raw Normal View History

<!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&nbsp;Dybvig, Will&nbsp;Clinger, Matthew&nbsp;Flatt, Mike&nbsp;Sperber, and Anton&nbsp;van&nbsp;Straaten</h2>
<h3>June 21, 2006</h3>
<p>
<p>
<table cellpadding=0 cellspacing=0>
<tr><td align="right"><b>1.&nbsp;</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.&nbsp;</b><td><b><a class=plain href="./status-jun06.html#g1">Change Log</a></b></td></tr>
<tr><td align="right"><b>3.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</b><td><b><a class=plain href="./status-jun06.html#g13">Reference implementations&nbsp;<a name="sec:refimpl"></a></a></b></td></tr>
<tr><td align="right"><b>7.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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.&nbsp;</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&nbsp;2006</a> version.
<p>
Section&nbsp;<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&nbsp;<a href="./status-jun06.html#g5">4.2</a> (new): describes the forms which portable
code can take.
<p>
Section&nbsp;<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&nbsp;<a href="./status-jun06.html#g7">4.4</a> lists several additional changes.
(All but the first four listed are new.)
<p>
Section&nbsp;<a href="./status-jun06.html#g8">4.5</a> lists several added features.
(All but the first six listed are new.)
<p>
Section&nbsp;<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&nbsp;<a href="./status-jun06.html#g7">4.4</a>.
<p>
Section&nbsp;<a href="./status-jun06.html#g10">4.7</a> lists several newly reaffirmed features.
(All but the first three listed are new.)
<p>
Section&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<a href="./status-jun06.html#g18">7.4</a> documents that the arithmetic SRFI
has undergone revisions.
<p>
Section&nbsp;<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&nbsp;<a class=ref href="http://srfi.schemers.org/srfi-34/">34</a>
and&nbsp;<a class=ref href="http://srfi.schemers.org/srfi-35/">35</a>.
<p>
Section&nbsp;<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&nbsp;<a class=ref href="http://srfi.schemers.org/srfi-79/">79</a>
and&nbsp;<a class=ref href="http://srfi.schemers.org/srfi-81/">81</a>.
<p>
Section&nbsp;<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&nbsp;74</a>.
<p>
Section&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<a href="./status-jun06.html#g7">4.4</a>)
<li><tt>case-lambda</tt>
(Section&nbsp;<a href="./status-jun06.html#g8">4.5</a>)
<li>bitwise operations on exact integers
(Section&nbsp;<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&nbsp;<a href="./status-jun06.html#g7">4.4</a> and&nbsp;<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&nbsp;<a href="./status-jun06.html#g8">4.5</a>)
</ul>
<p>
Section&nbsp;<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&nbsp;<a href="./status-jun06.html#g18">7.4</a>)
<li>arithmetic-flonum: Procedures specific to flonums (see Section&nbsp;<a href="./status-jun06.html#g18">7.4</a>)
<li>records-procedural: The procedural API to the record mechanism (see Section&nbsp;<a href="./status-jun06.html#g16">7.2</a>)
<li>records-reflection: The reflection procedures for the record mechanism (see Section&nbsp;<a href="./status-jun06.html#g16">7.2</a>)
<li>hash-tables: Hash tables (see Section&nbsp;<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&nbsp;<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&nbsp;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&nbsp;<i>x</i>&nbsp;<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&nbsp;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>-&gt;</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&nbsp;var)</tt> syntax: abbreviation for <tt>(define&nbsp;var&nbsp;(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&nbsp;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&nbsp;<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&nbsp;<i>n</i>)</tt> and <tt>(make-vector&nbsp;<i>n</i>)</tt>
remain unspecified (in particular, the elements of
<tt>(make-vector&nbsp;<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&nbsp;id&nbsp;e)&nbsp;=&gt;&nbsp;(letrec&nbsp;([id&nbsp;e])&nbsp;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&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;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&nbsp;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-&gt;char</tt> and <tt>char-&gt;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;79</a> (Primitive I/O) and
<a class=ref href="http://srfi.schemers.org/srfi-81/">SRFI&nbsp;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&nbsp;<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&nbsp;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&nbsp;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&nbsp;<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&nbsp;1,&nbsp;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&nbsp;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&nbsp;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&nbsp;Straaten </TD><TD nowrap align="left"> Dybvig</TD></TR><TR><TD nowrap align="left">
hash tables </TD><TD nowrap align="left"> van&nbsp;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&nbsp;<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>