These are the language changes listed in R6RS Appendix E, with notes on the extent to which R7RS-small has taken them up.
- Scheme source code now uses the Unicode character set. Specifically, the character set that can be used for identifiers has been greatly expanded.
- Permitted but not required.
- Identifiers can now start with the characters ->.
- Identifiers and symbol literals are now case-sensitive.
- Identifiers and representations of characters, booleans, number objects, and . must be explicitly delimited.
- # is now a delimiter.
- Rejected for compatibility with existing Schemes.
- Bytevector literal syntax has been added.
- Adopted in principle, but SRFI 4 lexical syntax is used.
- Matched square brackets can be used synonymously with parentheses.
- Rejected on the grounds that implementations may wish to use brackets for better things.
- The read-syntax abbreviations #' (for syntax), #-backquote (for quasisyntax), #, (for unsyntax), and #,@ (for unsyntax-splicing) have been added.
- Irrelevant, because syntax-case is not part of R7RS-small.
- # can no longer be used in place of digits in number representations.
- No longer required, but still permitted.
- The external representation of number objects can now include a mantissa width.
- Literals for NaNs and infinities were added.
- String and character literals can now use a variety of escape sequences.
- Block and datum comments have been added.
- The #!r6rs comment for marking report-compliant lexical syntax has been added.
- Rejected; there is no R7RS analogue of it.
- Characters are now specified to correspond to Unicode scalar values.
- Adopted in part: implementations are not required to handle all Unicode scalar values.
- Many of the procedures and syntactic forms of the language are now part of the (rnrs base (6)) library. Some procedures and syntactic forms have been moved to other libraries.
- Adopted in principle, but the details differ.
- The base language has the following new procedures and syntactic forms: letrec*, let-values, let*-values, real-valued?, rational-valued?, integer-valued?, exact, inexact, finite?, infinite?, nan?, div, mod, div-and-mod, div0, mod0, div0-and-mod0, exact-integer-sqrt, boolean=?, symbol=?, string-for-each, vector-map, vector-for-each, error, assertion-violation, assert, call/cc, identifier-syntax.
- All adopted except the -valued procedures, the division procedures (R7RS-small has different ones), assertions, and identifier syntax.
- The following procedures have been removed: char-ready?, transcript-on, transcript-off, load.
- Only transcript-on and transcript-off are removed.
- The case-insensitive string comparisons (string-ci=?, string-ci<?, string-ci>?, string-ci<=?, string-ci>=?) operate on the case-folded versions of the strings rather than as the simple lexicographic ordering induced by the corresponding character comparison procedures.
- Adopted. However, the non-ci versions are implementation-dependent in R7RS-small.
- Libraries have been added to the language.
- Adopted, but the details differ slightly.
- A number of standard libraries are described.
- Adopted, but the details differ.
- Many situations that "were an error" now have defined or constrained behavior. In particular, many are now specified in terms of the exception system.
- Rejected for backward compatibility with existing Schemes.
- The full numerical tower is now required.
- The semantics for the transcendental functions has been specified more fully.
- The semantics of expt for zero bases has been refined.
- In syntax-rules forms, a _ may be used in place of the keyword.
- The let-syntax and letrec-syntax no longer introduce a new environment for their bodies.
- Rejected for backward compatibility with existing Schemes.
- For implementations that support NaNs or infinities, many arithmetic operations have been specified on these values consistently with IEEE 754.
- For implementations that support a distinct -0.0, the semantics of many arithmetic operations with regard to -0.0 has been specified consistently with IEEE 754.
- Scheme's real number objects now have an exact zero as their imaginary part.
- Rejected for backward compatibility with existing Schemes.
- The specification of quasiquote has been extended. Nested quasiquotations work correctly now, and unquote and unquote-splicing have been extended to several operands.
- Procedures now may or may not refer to locations. Consequently, eqv? is now unspecified in a few cases where it was specified before.
- Mostly rejected, although eq? may now distinguish between procedures where eqv? does not.
- The mutability of the values of quasiquote structures has been specified to some degree.
- The dynamic environment of the before and after procedures of dynamic-wind is now specified.
- Various expressions that have only side effects are now allowed to return an arbitrary number of values.
- Rejected for backward compatibility with existing Schemes.
- The order and semantics for macro expansion has been more fully specified.
- Internal definitions are now defined in terms of letrec*.
- The old notion of program structure and Scheme's top-level environment has been replaced by top-level programs and libraries.
- Adopted in parellel with the old semantics.
- The denotational semantics has been replaced by an operational semantics.
- The denotational semantics was updated rather than replaced.