This is a proposal for 43 new identifiers and 7 new lexical-syntax
features to be added to the "small Scheme" language beyond those of R5RS.
I am publishing this document to invite wide comment.  There is nothing
official about it.  I acknowledge the kind help of Taylor Campbell and
Alex Shinn in the discussions that led up to this; however, I retain
sole responsibility for it, including all errors.  I give the sources of
the identifiers and features in square brackets.

This proposal is biased toward things that cannot be implemented portably,
or cannot be implemented well, in plain R5RS.  Thus, large and important
libraries like SRFI-1 have been omitted; this does *not* mean that small
Scheme implementations shouldn't provide them.

I have omitted all consideration of I/O and SRFI-19 (dates and times),
not because I think they don't matter, but because I haven't settled my
views on them yet.

New syntax (11 identifiers):

        [SRFI 8] receive
        [SRFI 9] define-record-type
        [SRFI 11, R6RS base] let-values, let*-values
        [SRFI 16, R6RS control] case-lambda
        [SRFI 39] parameterize
        [SRFI 45] lazy
        [R6RS base] letrec*
        [placeholder for module system] component, import, include

New procedures (32 identifiers):

        [SRFI 6] open-input-string, open-output-string, get-output-string
        [SRFI 23] error
        [SRFI 27] random-integer, random-real
        [SRFI 39] make-parameter
        [SRFI 98] get-environment-variable, get-environment-variables
        [SRFI 74 augmented with R6RS bytevectors]
                blob?, make-blob, blob, blob-ref, blob-set!
                blob-length, blob=?, blob-fill!, blob-copy!, blob-copy
        [R6RS base]
                finite?, infinite?, nan?, div, mod, div0, mod0,
                exact-integer-sqrt, call/cc
                string-for-each, string-foldcase
                vector-map, vector-for-each
        [R6RS command] command-line, exit

New lexical syntax (7 features):

        [SRFI-30, R6RS] #| ... |# for block comments
        [CLHS, similar to SRFI-58] #nA for heterogeneous arrays
        [SRFI-62, R6RS] #; for datum comments
        [R6RS]
                #vu8 list for literal blobs
                +inf.0, -inf.0, +nan.0 for IEEE non-rationals
                escape sequences in strings
        [various implementations] #cs, #ci for case sensitivity control

Instances of #nA datum are replaced by (construct-array-from-lexical
n datum), which is not defined by small Scheme but may be provided by
implementations.  The name is deliberately ugly, but only implementers
should have to type it.

A living version of this post and successor posts may be found on Google
Docs at http://tinyurl.com/thing-one.

-- 
May the hair on your toes never fall out!       John Cowan
        --Thorin Oakenshield (to Bilbo)         [email protected]

_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss

Reply via email to