Hacking gadflies

Changes in R6RS: the latest status report

The editorial committee charged with preparing the next version of the language definition for Scheme has produced another status report. Here are the high points:

There will be a mechanism for defining record types.

There will be mechanisms for raising and handling exceptions.

Character and string procedures will be redesigned to fit Unicode rather than ASCII. If the editors' current proposal is implemented, as seems likely, conversions and case-insensitive comparisons will depend on Unicode's intricate case-folding specifications, including the pathological oddities of the German eszet -- e.g., (string-length foo) is not equal to (string-length (string-upcase foo)) when foo contains one or more eszets.

The more elaborate and more powerful syntax-case mechanism for defining macros will become standard (in addition to syntax-rules).

Many of the procedures specified by the current language definition will be separated from the core language and put in libraries. I imagine, however, that the behavior of these standard library procedures will still be defined in the R6RS report.

Program texts and symbol literals will be case-sensitive.

There will be a new kind of expression, the letrec*-expression, similar to the letrec-expressions except that the bindings are introduced sequentially, from left to right, rather than as a group. Internal definitions, which are currently macro-expanded into letrec-expressions, will instead be macro-expanded into letrec*-expressions. This means that they can be cumulative but cannot be mutually recursive.

There will be block comments, with #| and |# as the opening and closing delimiters. Also, prefixing #; to any expression will convert that expression into a comment, effectively making it invisible to the evaluator.