[R6RS] Core/library strawman take 2

Anton van Straaten anton at appsolutions.com
Tue Apr 11 03:42:11 EDT 2006


Here's a summary of the updated core/library split proposal.  I can post 
a more detailed version later on Tuesday, but the below should provide a 
basis for further discussion in our meeting today.

For the new proposal, I'm temporarily putting aside the question of how 
the library system specifies its own version, and assuming that 
libraries must specify the language they depend on as an ordinary 
library import, e.g. "(import r6rs)" or "(import r6r6-core)".

As an overview, the names of the proposed libraries are as follows:

* r6rs-core
* syntax-rules
* syntax-case
* fixnum
* flonum
* primitive-i/o
* port-i/o
* multiple-values
* promises
* eval
* records-procedural
* records-explicit
* records-implicit (subsumes records-explicit)
* records-reflection
* hash-tables

In addition to the above, some composite libraries are defined, 
consisting of combinations of the above libraries:

* records - provides the combined functionality of the other four 
records libraries.
* r6rs-small
* r6rs
* r6rs-big

The contents of these libraries are summarized below.


Library: r6rs-core
------------------
After last week's meeting, I've consolidated a number of the smaller 
libraries into a single one, which includes the following items:

* All of the primitive expression types described in R5RS 4.1, including 
if, lambda, quote, set!
* 'define' - definitions as described in R5RS 5.2
* R5RS 4.2.1 Conditionals: cond, case, and, or
* R5RS 4.2.2 Binding constructs: let, let*, letrec, letrec*
* R5RS 4.2.3 Sequencing: begin
* R5RS 4.2.4 Iteration: do, named let
* R5RS 4.2.6 Quasiquotation: quasiquote, unquote, unquote-splicing
* R5RS 6.1 Equivalence predicates
* R5RS 6.2 Generic arithmetic procedures (excluding flonum- and 
fixnum-specific procedures)
* R5RS 6.3 Other data types: booleans, pairs and lists, symbols, chars, 
strings, vectors and related procedures.
* Procedures related to the new 'bytes' type.
* R5RS 6.4: procedure? apply map for-each call-with-current-continuation 
dynamic-wind
* Exception and conditions (SRFI 34 and 35)

This library includes features which some client libraries may wish to 
exclude.  The SRFI 83 "except" clause can be used for this purpose, e.g.

(library "hello" "scheme://r6rs"
   (import (except "r6rs" do named-let)
           ...)
   ...)


Library: syntax-rules
---------------------
Provides define-syntax, let-syntax, letrec-syntax, and the syntax-rules 
macro system.


Library: syntax-case
--------------------
Provides define-syntax, let-syntax, letrec-syntax, the syntax-case macro 
system, and syntax-rules.


Library: fixnum
---------------
Fixnum-specific procedures.


Library: flonum
---------------
Flonum-specific procedures.


Library: primitive-i/o
----------------------
SRFI 79


Library: port-i/o
-----------------
SRFI 81


Library: multiple-values
------------------------
values, call-with-values, "let-values", etc.


Library: promises
-----------------
delay, force -- we have decided that these are "definitely in a separate 
library".  Should they be combined into some other library outside the core?


Library: eval
-------------
load, eval, scheme-report-environment, null-environment, 
interaction-environment


Library: records
----------------
The record system will be split into four separate libraries.  This 
'records' library provides the combined functionality of all four libraries.


Library: records-procedural
---------------------------
SRFI 76 procedural layer


Library: records-explicit
-------------------------
SRFI 76 explicit-naming syntactic layer


Library: records-implicit
-------------------------
SRFI 76 implicit-naming syntactic layer (subsumes explicit-naming layer)


Library: records-reflection
---------------------------
SRFI 76 explicit-naming syntactic layer


Library: hash-tables
--------------------
Hash tables, hash functions (latter possibly separate library).


Library: r6rs-small
-------------------
This library provides basic Scheme features, and excludes certain less 
essential features such as fixnum- and flonum-specific operations, and 
multiple value handling forms.  It is composed of the following libraries:

     r6rs-core
     syntax-case
     port-i/o


Library: r6rs
-------------
This library provides a fairly complete set of R6RS features, excluding 
certain libraries not considered part of the base R6RS language, e.g. 
promises, hash tables, and the eval library.  Composition:

     r6rs-small
     fixnum
     flonum
     multiple-values
     primitive-i/o
     records-explicit


Library: r6rs-big
-----------------
This library provides all features defined in the R6RS.  Composition:

     r6rs
     promises
     eval
     hash-tables
     records-procedural
     records-implicit
     records-reflection


Issue: R5RS support
-------------------
Should an R5RS compatibility library be specified?  If so, should it be 
specified as an alternative to r6rs-core?  This assumes that r6rs-core 
is not considered sufficiently r5rs-compatible.  Alternatively, should 
r6rs-core be refactored to allow an R5RS compatibility library to depend 
on it?

**end**




More information about the R6RS mailing list