Re: Suggestions and EIOD update campbell@xxxxxx 07 Nov 2004 17:30 UTC

OK, there is a new document up that I hope to finalize within the next
day.  Any further comments should be sent by tomorrow at around 16.00
EST.

On Fri, 29 Oct 2004, Algebraic Pentameter Petrofsky wrote:

> At http://petrofsky.org/src I've put an updated version of EIOD that
> supports the SRFI-46 draft.  At the same location you can find
> alexpander, which also supports the current draft.

Thanks, I've added this to the document and directory.

> Some comments on the SRFI:
>
>   ELLIPSIS-IDENTIFIER specifies the token used for ellipsis.  ... This
>   identifier, when generated by macros, is subject to the usual rules
>   of hygiene.
>
> [...]
>
> These "usual rules" don't say anything about ellipses.  I think the
> minimal way to state what you are getting at (assuming that what you
> are trying to say is what I implemented) is something like this:
>
>   When an ellipsis identifier is specified, that specification is
>   considered a binding whose scope is the rules of the transformer.
>   The macro system must make the usual hygienic arrangements to
>   preserve the lexical scoping of these bindings.

OK, I've changed the text to look a bit more like this.

> Here's an example you could use, whose result depends on whether or
> not F inserts the binding for ::: hygienicly:
>
>   (let-syntax
>       ((f (syntax-rules ()
> 	    ((f e)
> 	     (let-syntax
> 		 ((g (syntax-rules ::: ()
> 		       ((g (x e) (y :::))
> 			'((x) e (y) :::)))))
> 	       (g (1 2) (3 4)))))))
>     (f :::))
>   => ((1) 2 (3) (4))    [ rather than ((1) (2) (3) (4)) ]

I have added this example.

> I think the "tail patterns" feature would also benefit from at least
> one example expression, which should explicitly include the concrete
> result you expect.  Here's one:
>
>   (let-syntax
>       ((foo (syntax-rules ()
> 	      ((foo x y ... z) (list x (list y ...) z)))))
>     (foo 1 2 3 4 5))
>   => (1 (2 3 4) 5)

I think this example isn't really necessary; there already is one --
FAKE-BEGIN -- which I think suffices.

> At the end of the SRFI:
>
>   There is no 'official' reference implementation here provided,
>   because this SRFI defines an extension to existing macro expanders,
>   which all vary vastly in implementation.
>
> I think you mean to say that it is impractical to provide a widely
> ready-to-use implementation.

Correct.  I have changed the text to reflect this.

>   Al* Petrofsky suggested that there still be here provided some
>   examples of macro expanders that have been modified to support these
>   extensions already;
>
> Right, and that's what reference implementations are: implementations
> to which people can refer when implementing the specification.

...and to reflect this.  Is there anything else you'd like me to add on
the matter of the reference implementations?