[R6RS] categorization of goals
R. Kent Dybvig
dyb
Mon Mar 22 20:51:34 EST 2004
> DELETIONS from R5RS
> - remove transcript-{on,off}
No objection.
> - remove FORCE and DELAY
I agree with Will that these should be in a standard library.
> - remove multiple values
I believe that they should remain and that we should in fact add
let-values from SRFI 11.
> ================================================================
> INCOMPATIBLE CHANGES to R5RS
> - make syntax case-sensitive
I wouldn't mind breaking some existing code to make symbols case
sensitive. My reasons have only to do with expanding the namespace.
For example, I find it really useful to write, e.g., Expr for the
procedure that handles exprs, and use expr as the name of Expr's argument.
> ================================================================
> EXTENSIONS that would break implementation-specific extensions
> - specify evaluation order
I don't mind specifying that internal defines are ordered from left to
right, but I object to specifying the order in which the subexpressions of
an application or right-hand sides of let and letrec are evaluated. The
unspecified order gives the programmer a way to express that evaluation
order is unimportant, and we'd lose that entirely. Said another way,
a fixed evaluation order forces overspecification.
I've considered the argument that it's easier to prove programs correct
or to portably test programs if the evaluation order is specified, but
a simple way around that is to first transform the program to make the
order explicit, then prove or test the program, and draw conclusions
only about the transformed program.
> - support for processes
Pthreads is fairly ubiquitous these days, so it might be useful to have
a standard thread system based on pthreads. This is probably better as
an SRFI in the short term, however.
> - support for network programming
This should go into a standard library.
> - object-oriented programming
This is probably too controversial.
> - external representation for records
This seems like a good idea to me.
> - serialization
No opinion.
> ================================================================
> EXTENSIONS to R5RS (controversial and probably unnecessary)
> - pattern matching / destructuring
No opinion.
> - abstract data type for continuations
This strikes me as similar to the arity? procedure that we've voted
down several times in the past, in that it is useless in the presence
of procedural embeddings. If an continuation? is false of an object,
does that mean it can't behave like a continuation?
> - support composable continuations
I think it would be nice to standardize on a set of low-level operators
that are strong enough to implement call/cc and the variety of functional
control operators that have been proposed, then relegate call/cc to
library status. (To be clear: I want to make sure we have support for
continuations in the core.)
> - add box types
I never use boxes myself, so I'd prefer to let them die. There's not
much advantage to including them once we have records.
> - uninterned symbols
> vs. Chez's globally unique names
Naturally, I'd like to include globally unique names (which we call
gensyms).
> - extended symbol syntax
This goes along with gensyms.
> - add LETREC*, define internal DEFINE in terms of it
I don't care about adding letrec*, but specifying that definitions be
evaluated left to right might be useful.
> - optional and keyword arguments as in DSSSL
I prefer case-lambda. Optional and keyword arguments can be handled in
a library.
> ================================================================
> EXTENSIONS to R5RS (controversial or difficult but necessary)
> - module system
I favor both Dr. Scheme's notion of modules, which to me are more like
libraries or compilation units, and Chez Scheme's notion of modules,
which are available to control scope at all levels. I believe that
they are really separate notions.
> - non-hygienic macros
Naturally, I think this is a good idea.
> - records
Yes, both in a procedural and syntactic form.
> - mechanism for new primitive types
Isn't this essentially the same as records?
> - Unicode support
Yes (as part of the core).
> - errors and exceptions
Yes.
> - require mode where "it is an error" means "an error is signalled"
Yes.
> ================================================================
> EXTENSIONS to R5RS (probably not terribly controversial)
> - multiline comments
Yes. Plus #;<s-expr> to comment out s-expressions. This came up at
some point but didn't make this list.
> - external representation for circular structures
Yes.
> - #!eof
Yes.
> - more escape characters
Yes.
> - require that #f, #t, and characters be followed by a delimiter
Yes.
> - CASE-LAMBDA
Yes.
> - add COND-EXPAND
Is this something like eval-when? We've worked out eval-when so that
it is really quite sensible (and useful), but I sense strong opposition
to it. I don't think the Dr. Scheme notion of module completely covers
what eval-when can do, but I'd be happy to be proven wrong.
> - allow the name of the macro being defined in SYNTAX-RULES to be
> arbitrary (or _)
Yes.
> - allow continuations created by begin to accept any number of values
Yes.
> - tighten up specification of EQ? and EQV? (or otherwise address their
> portability problems)
No opinion.
> - tighten up specification of inexact arithmetic
Yes.
> - add +0, -0, +inf, -inf, +nan
Yes, but with slightly different syntax. +0 and -0 are already both
exact 0, and I wouldn't want to change that. IEEE -0.0 would presumably
have to be written as -0.0 (or -0e20 or -0###, etc.). I also favor
+inf.0, -inf.0, and +nan.0 since the .0 makes clear that they are inexact
(in case someone someday wants to add exact nan or [hmm...] inf); also,
the .0 makes the numberness jump out better.
This probably goes along with a commitment that inexact numbers are
IEEE floats.
> - add bitwise operations on exact integers
Yes.
> - SRFI 4 homogeneous numeric vectors
No opinion.
> - specify dynamic environment
No opinion.
> - operations on files
Yes.
> - binary I/O
> or: new I/O subsystem entirely
Unsure.
> - string code
Yes (library).
> - regular expressions
Yes (library).
> - command-line parsing
Yes (library).
> - hash tables
Yes (library).
> - library for dates
Yes (library).
> - system operations
Yes (library).
> ================================================================
> EDITORIAL CHANGES
> - split language into core and libraries
Yes---but I prefer a rather larger core than some might prefer,
probably even larger than the current r5rs.
> ================================================================
> ADDITIONAL EXTENSIONS
- Support for expression comments, as mentioned above.
(let ((x 3) #;(y 4))
#;(write (list x #;y))
(* x x))
reads as (let ([x 3]) (* x x)). This also subsumes the common usage of
' to comment out top-level forms, which breaks down for non-top-level
definitions.
- Support for a subset of Common Lisp format (in a library).
Lack of support for formatted I/O is something that turns lots of
people off about Scheme.
(This occurred to me as I worked on this note---sorry for not submitting
it sooner.)
Kent
More information about the R6RS
mailing list