[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
and thanks to Kent Dybvig for making this SRFI available. The
design of syntax transformation in R6RS is not a simple task, with
various very good designs - explicit renaming, syntactic closures
and SYNTAX-CASE - being available.
I'm not much into all of this, so I'll try to restrict myself to
some specific problems I can see in the SRFI itself.
Section 3 mentions "singleton identifiers" as a possible form for
syntax abstractions, and refers to section 3.6 for more information. I
couldn't find this in 3.6.
The interpretation of DEFINE-SYNTAX according to section 3.3 seems
to be difficult to integrate with the expansion of internal
DEFINEs into LETREC* forms. Would it be possible to add a
definition of the full expansion process in the SRFI here?
According to section 3.4, transformers are procedures which accept a
single argument. Not only is this incompatible with existing systems
(such as explicit renaming), it is also problematic for later
extension. I think it would be more useful to use a new form here,
such as (SYNTAX-TRANSFORMER STX (SYNTAX-CASE STX ...)) or
(SYNTAX-LAMBDA (STX) (SYNTAX-CASE STX ...)).
Variable transformers are introduced in the same section. The
whole purpose of this seems to be to allow a generalized SET!
similar to SRFI-17. This seems somewhat kludgey, and not very much
related to the purpose of syntax transformation. What is the
rationale to define a generalized SET! together with other syntax
transformations, and not as a specific extension to SET!?
Finally, section 3.6 mentions #(pattern*) etc. as a possible
pattern. R5RS does not allow vector literals, they do have to be
quoted. Does this mean one can define #(foo) to be semantically
meaningful syntax in R6RS? What is the rationale for allowing
((email . "forcer@xxxxxxxxx") (www . "http://www.forcix.cx/")
(gpg . "1024D/028AF63C") (irc . "nick forcer on IRCnet"))