Correction:
http://tinyurl.com/yellow-ballot-responses
(You posted the right URL in #scheme.)
> The results were as follows:
>
> a) Explicit renaming failed. Sorry about that, Gauche, MIT, Chicken,
> Bigloo, SCM, STklos, Scheme 9, Foment, Picrin, and Owl Lisp fans. One
> thing discovered during the ballot period is that if syntax-case has linear
> expansion, explicit renaming has quadratic expansion, and vice versa.
>
> b) SRFI 5 (`let` with signatures and rest args) and SRFI 156 ((is a < b)
> rewritten as (< a b)) also failed.
>
> c) All other ballot questions passed, namely:
> R6RS-compatible syntax-case
> R6RS identifier syntax
> SRFI 139 syntax parameters
> SRFI 188 splicing let(rec)-syntax
> SRFI 212 identifier splicing
> SRFI 213 identifier properties
> SRFI 61 generalized `cond`
> SRFI 8 `receive`
> SRFI 31 `rec`
> SRFI 26 `cut`
> SRFI 219 nested `define`
> SRFI 210 multiple-value library
I am satisfied with these results. Here is a partial list of issues to consider now:
To do with syntax-case:
• What is the relationship between the procedure syntax-violation of R6RS syntax-case and the special form syntax-error of R7RS small? The former has only three irritants, of which two can probably automatically be supplied assuming syntax-error is implemented in terms of syntax-case, but how implementations are meant to fill the arbitrary number of miscellaneous irritants from syntax-error into a syntax-violation call is unclear.
• Have we implicitly adopted the reader notations #' #` #, and #,@?
• What identifiers within a module are available to be used by macro transformer procedures in that module? What do they refer to? Are they automatically also available to run-time code if they are available to compile-time code? (In other words, how does phasing work in R7RS Large?)
• If I return a value from a syntax transformer which can’t usually appear as a literal in code (a record or a procedure, mainly), what are the evaluation semantics in R7RS?
• Do we wish to provide low-level destructuring of syntax objects in addition to the high-level syntax-case pattern matcher? There are currently two options: the Racket/Gerbil/Chez style <
https://gitlab.com/dpk/presrfis/-/blob/master/syntax-case-extensions.md> or the R4RS style <
https://www.cs.cmu.edu/Groups/AI/html/r4rs/r4rs_12.html#SEC84>; the distinction is essentially in naming and more convenience procedures in the former.
Other things:
• Does SRFI 61’s cond now extend the cond in (scheme base) or is it a distinct library? (I would be for the latter, and for giving it a distinct name).
• I am not happy about the name of ‘cut’ and ‘cute’, nor the auxiliary syntax. In the former case, even the official explanation given in the SRFI doesn’t make sense: why ‘curry *upon* this’ and not just ‘curry this’ (ct)? Furthermore, this clearly isn’t currying anyway, as the title of the SRFI even admits. (Is it meant to be ironic? A taunt to Haskell programmers?) In the latter, _ for <> would match the conventions of syntax-rules and also other language’s similar features (I believe Scala uses the underscore for something like this). Actually if I had my way I’d use curly braces for this, but lexical notation is probably very much out of the question ;-) ‘pat’ for pattern (as this is a pattern-based way to create a procedure) is one suggestion off the top of my head. Or pat-lambda/pattern-lambda, if that’s too obscure.
• I would still prefer define-alias to just alias. As John said, I consider the ‘establishes a new name’ part of define-* names to be more significant than the ‘establishes a new binding location’ part. (Note Emacs Lisp has defalias and not just alias, for example, and Gerbil and Kawa both call this define-alias.)
Daphne