> If we switch SRFI 177 to using (keyword-lambda (arg ... &key arg ...) .
> body) format, we cannot use syntax-rules any more.
Thank you very much for taking the time to put this together.
Sorry for not getting back to the other thread (Syntactic keywords vs
parentheses). You said you take it for granted that (keyword-lambda (a b
&key c d) ...) is better than (keyword-lambda (a b (c d)) ...). Why is
that, and which syntax would you prefer with `keyword-call`?
> Here are the
> implementations I think we would need. I know 9 is a lot, but there are
> really only 3, one for each type of low-level macro, but with trivial
> differences in the output and different library packaging.
9 is not a lot: we already have that many :) I won't even mind 18
implementations if it means library writers get portable keyword args.
> 1a) Bigloo, STKlos, S7: written in define-macro, :foo native keywords, no
> packaging.
Correct. We can't use syntax-rules for keyword-call because it can't
convert symbols to keyword objects.
> 1b) RScheme, Rep, Elk, Dfsch: written in define-macro, no native keywords,
> no packaging
Thanks; I didn't try any of these for this SRFI. define-macro is not a
deal-breaker for me, but is quite a bit of extra work.
> 2a) Gambit, SISC, SXM: written in syntax-case, no native keywords, no
> packaging.
Gambit has had native keywords and namespaces for a long time. It just
got R7RS library support (implemented on top of namespaces). syntax-case
is temporarily broken. There's define-macro, but R7RS and define-macro
interop has some gotchas right now. The macro system issues should be
resolved next year; Marc is very helpful and active.
SISC I didn't try for this SRFI.
SXM I've never heard of before. Does it still run on Linux? If so, we'll
make a Docker container.
> 2b) Guile: written in syntax-case, #:foo native keywords, R6RS packaging.
Yes; already implemented using syntax-case.
> 2c) Racket, Kawa: written in syntax-case, #:foo magic keywords, R6RS
> packaging
Yep; already implemented using syntax-case.
> 2d) Portable R6RS (includes Chez, Vicare, Larceny, Ypsilon, Mosh,
> IronScheme, Sagittarius): written in syntax-case, no native keywords, R6RS
> packaging.
Also Ikarus and Loko, both of which use psyntax :) Currently all
syntax-rules; syntax-case wouldn't be a problem.
Sagittarius has native keyword arguments, which we already support,
though the portable R6RS version works there as well.
> 3a) Chicken: written in explicit renaming, #:foo native keywords, Chicken
> packaging (similar to R6/R7RS)
Right, already working.
> 3b) Gauche, MIT, Scheme48/scsh: written in explicit renaming, no native
> keywords, no packaging
Shiro has the Gauche ER implementation upcoming.
I didn't try MIT or Scheme48/scsh at all. I would welcome an ER
implementation.
> 3c) Picrin, Chibi: written in explicit renaming, no native keywords, R7RS
> packaging.
Good to know. Chibi currently just uses syntax-rules.
I'll test the next draft of 177 with Picrin too.