Skip to content
Felix S. Klock II edited this page Jul 28, 2013 · 1 revision

== Changes Listed by the R6RS ==

The current draft R6RS contains a list of differences between the R5RS and draft R6RS. The table below uses an edited version of that list to show which changes have been implemented in the R5RS and R6RS modes of Larceny's current development version and in the R5RS mode of MzScheme v371.

(MzScheme's R5RS mode is relevant because we want to be able to cross-compile and to build Larceny using either Larceny or MzScheme. MzScheme v4.0.2 is so different from MzScheme v371 that we can't use it to build Larceny. For now, we are continuing to use MzScheme v37x.)


                                                Larceny      Larceny     MzScheme
                                                 R5RS         R6RS         R5RS

Scheme source code now Unicode                     -           yes          yes
Identifiers can start with ->                     yes          yes          yes
Identifiers and symbols case-sensitive            yes          yes          yes
Bytevector literal syntax                         yes          yes           -
The read-syntax abbreviations #', #`, #,, #,@     yes          yes          yes
Numbers may include mantissa width                yes          yes           -
Literals for NaNs and infinities                  yes          yes          yes
String and character escape sequences             yes          yes           -
No #\newline syntax                               yes          yes           -
Block and datum comments                          yes          yes          yes
The !#r6rs comment                                yes          yes           -
Characters correspond to Unicode scalar values    yes          yes          yes
Procedures and forms moved into libraries          -           yes           -

New syntax and procedures:
letrec*                                           yes          yes           -
let-values                                        yes          yes          yes
let*-values                                       yes          yes          yes
real-valued?                                      yes          yes           -
rational-valued?                                  yes          yes           -
integer-valued?                                   yes          yes           -
exact                                             yes          yes           -
inexact                                           yes          yes           -
finite?                                           yes          yes           -
infinite?                                         yes          yes           -
nan?                                              yes          yes           -
div                                               yes          yes           -
mod                                               yes          yes           -
div-and-mod                                       yes          yes           -
div0                                              yes          yes           -
mod0                                              yes          yes           -
div0-and-mod0                                     yes          yes           -
exact-integer-sqrt                                yes          yes           -
boolean=?                                         yes          yes           -
symbol=?                                          yes          yes           -
string-for-each                                   yes          yes           -
vector-map                                        yes          yes           -
vector-for-each                                   yes          yes           -
error                                             yes          yes           -
assertion-violation                               yes          yes           -
assert                                            yes          yes           -
call/cc                                           yes          yes          yes
identifier-syntax                                  -           yes           -

Case-insensitive comparisons use case-folding     yes          yes          yes
Libraries added                                    -           yes           -

Standard libraries:
(rnrs unicode (6))                                 -           yes           -
(rnrs bytevector (6))                              -           yes           -
(rnrs lists (6))                                   -           yes           -
(rnrs sorting (6))                                 -           yes           -
(rnrs control (6))                                 -           yes           -
(rnrs records procedural (6))                      -           yes           -
(rnrs records syntactic (6))                       -           yes           -
(rnrs records inspection (6))                      -           yes           -
(rnrs exceptions (6))                              -           yes           -
(rnrs conditions (6))                              -           yes           -
(rnrs i/o ports (6))                               -           yes           -
(rnrs i/o simple (6))                              -           yes           -
(rnrs files (6))                                   -           yes           -
(rnrs programs (6))                                -           yes           -
(rnrs arithmetic fx (6))                           -           yes           -
(rnrs arithmetic flonum (6))                       -           yes           -
(rnrs arithmetic bitwise (6))                      -           yes           -
(rnrs syntax-case (6))                             -           yes           -
(rnrs hashtables (6))                              -           yes           -
(rnrs enum (6))                                    -           yes           -
(rnrs (6))                                         -           yes           -
(rnrs eval (6))                                    -           yes           -
(rnrs mutable-pairs (6))                           -           yes           -
(rnrs mutable-strings (6))                         -           yes           -
(rnrs r5rs (6))                                    -           yes           -

Many situations raise specific exceptions          -           yes           -
The full numeric tower                            yes          yes          yes
Semantics for transcendental functions             -            ?  [1]       -
Semantics of expt for zero bases                  yes          yes          yes
Syntax-rules allows _                             yes          yes          yes
let-syntax and letrec-syntax splice bodies         -           yes           -
Semantics of NaNs and infinities                  yes          yes          yes
Semantics of -0.0                                  -           yes          yes
Reals have exact zero as imaginary part            -           yes [1]       -
Extended quasiquote                                -           yes           -
Mutability of quasiquote structures specified      -            ?            -
Dynamic environment specified for dynamic-wind    yes          yes           ?
Order and semantics for macro expansion            -           yes           ?
Internal definitions use letrec*                  yes          yes          yes
R5RS programs replaced by top-level programs       -           yes           -

Most of the new R6RS procedures have been added to Larceny's standard R5RS mode, but not as libraries.

[1] not yet implemented for Common Larceny

Clone this wiki locally