This is getting sillier and sillier. I love it.
Sam TH wrote:
> > > Finally, the R6RS has admirably refrained from specifying too many
> > > proposals that had not previously been implemented, and that the
> > > community has no experience with.
> >
> > LOL!
>
> According to the R6RS, the list of language changes is here:
>
> http://www.r6rs.org/document/html-5.94/r6rs-Z-H-17.html
>
> In that document, I would say that the vast majority have been
> implemented by some currently-extant Scheme implementation.
Say what you like.
The more relevant insanity check is whether any extant
implementation of Scheme implements even a bare majority
of the changes. In fact, that's a much more interesting
topic than the one we've discussing, so I'm changing the
subject line.
I think Scheme 48 1.6, Larceny v0.94, and MzScheme v370
have implemented more of the R6RS changes than have any
other extant systems. I haven't installed Scheme 48 1.6
yet, but let's see how many of the 86 listed changes
(some, such as the operational semantics, don't count)
have already been implemented by Larceny and MzScheme.
(I ran the Larceny tests in #!r6rs reader mode.)
* * *
Larceny MzScheme
Scheme source code now Unicode - yes
Identifiers can start with -> yes yes
Identifiers and symbols case-sensitive yes yes
Bytevector literal syntax yes -
The read-syntax abbreviations #', #`, #,, #,_at_ yes yes
Numbers may include mantissa width - -
Literals for NaNs and infinities yes yes
String and character escape sequences yes -
No #\newline syntax yes -
Block and datum comments yes yes
The !#r6rs comment yes -
Characters correspond to Unicode scalar values yes yes
Procedures and forms moved into libraries - -
New syntax and procedures:
letrec* - -
let-values yes yes
let*-values yes yes
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 yes -
assertion-violation yes -
assert yes -
call/cc - yes
identifier-syntax - -
Removed:
char-ready? - -
transcript-on yes -
transcript-off yes -
load - -
Case-insensitive comparisons use case-folding yes yes
Libraries added
Standard libraries:
(rnrs unicode (6)) - -
(rnrs bytevector (6)) - -
(rnrs lists (6)) - -
(rnrs sorting (6)) - -
(rnrs control (6)) - -
(rnrs records procedural (6)) - -
(rnrs records syntactic (6)) - -
(rnrs records inspection (6)) - -
(rnrs exceptions (6)) - -
(rnrs conditions (6)) - -
(rnrs i/o ports (6)) - -
(rnrs i/o simple (6)) - -
(rnrs files (6)) - -
(rnrs programs (6)) - -
(rnrs arithmetic fx (6)) - -
(rnrs arithmetic flonum (6)) - -
(rnrs arithmetic bitwise (6)) - -
(rnrs syntax-case (6)) - -
(rnrs hashtables (6)) - -
(rnrs enum (6)) - -
(rnrs (6)) - -
(rnrs eval (6)) - -
(rnrs mutable-pairs (6)) - -
(rnrs mutable-strings (6)) - -
(rnrs r5rs (6)) - -
Many situations raise specific exceptions - -
The full numeric tower yes yes
Semantics for transcendental functions - -
Semantics of expt for zero bases yes yes
Syntax-rules allows _ yes yes
let-syntax and letrec-syntax don't introduce
a new environment for their bodies - -
Semantics of NaNs and infinities yes yes
Semantics of -0.0 - yes
Reals have exact zero as imaginary part - -
Extended quasiquote - -
Mutability of quasiquote structures specified - -
Dynamic environment specified for dynamic-wind - ?
Order and semantics for macro expansion - ?
Internal definitions use letrec* yes yes
R5RS programs replaced by top-level programs - -
* * *
For those of you keeping score at home, that's 23/86 and 17/86,
with two I didn't bother to test.
As silly as it appears, this was a useful exercise for me. It
lists the work we have yet to do in Larceny, and it also lists
the changes we can't rely on in MzScheme, which is currently
the only implementation other than Larceny that can be used to
build Larceny from source.
Will
Received on Wed Jun 20 2007 - 14:11:07 UTC