[R6RS] libraries
Matthew Flatt
mflatt
Thu Dec 8 11:57:54 EST 2005
At Wed, 7 Dec 2005 10:06:28 +0100, "Manuel Serrano" wrote:
> > > Are you using a unique environment for
> > > macros and variables? In other words, do you mean that it is an
> > > error to define a macro and a variable with the same name?
> >
> > Yes. It seems that we simply disagree on this point.
> Yes. I'm afraid that we disagree. The problem, I think, is that the current
> design relies on this merged namespace.
I agree that the current design relies on a single namespace for bindings.
> Without it, how do you handle
> intuitively:
>
> <body> = <impexp-form>* <comdef-form>*
>
> You could imagine a kind of virus such as:
>
> (library <lpath> <lang>
> (export export)
>
> (define (export . l) <do something nasty>))
>
> To me, the solution to this problem is not to enforce a unique namespace
> but to give more structure to library. For instance, I think that an
> alternative design could be:
>
> (library <lpath> <lang> (<impexp-form>*) <body>)
I'm not opposed to this in principle, and I see how it solves the above
problem.
But I don't understand what you have in mind more generally. What if a
library imports from from others, A and B, where A exports a function
`foo' and B exports a macro `foo'. When `foo' is used, which binding
applies?
> > > > I think the `library' form has to work well with macros, or it won't be
> > > > a useful standard (and "work well" to me means "obeys lexical scope").
> > > > If there's disagreement on this point, we should certainly discuss it
> > > > further.
> > > I imagine that I will be pretty alone on this side but no, I don't
> > > think that I want to enforce macros to use lexical scoping. I think
> > > that, at least, we should not specify this in the library specification. In
> > > particular, I think that we can adopt SYNTAX-CASE. We can specify that
> > > macros defined with SYNTAX-CASE are hygienic but I don't think that we
> > > should specify that a Scheme that uses traditional Lisp macros cannot
> > > be R6Rs because of the specification of the LIBRARY form.
> >
> > If an implementation supports defmacro, then certainly such macros
> > wouldn't be required to obey lexical scope. Where the SRFI says
> > "macros", I had in mind "macros defined using standard mechanisms",
> > which I expect to be `syntax-rules' and `syntax-case'. In any case, I
> > think the library and macro standard parts of the will have to
> > reference each other.
> May be but do you think that dropping the paragraph above would really
> change something for the comprehension and description of the libraries.
>
> "Macro expansion obeys lexical scope in the sense that if a macro
> expansion introduces a identifier that is bound in the context of the
> macro definition, it refers to the binding in the environment of the
> macro-definition library, not in the environment of the expansion."
In the present situation, where there's not yet a syntax SRFI, I think
the paragraph helps the SRFI audience understand the editors' plans for
R6RS (i.e., that macros and libraries will play together). Otherwise,
it doesn't say much at all.
> I have another remark that I have already made but I would like everybody's
> opinion. This remark is about interpreter vs compiler. I imagine that
> we are going to support the function EVAL.
Actually, I would like to remove `eval' and `load' from
"scheme://r6rs". I think it belongs with the definition of a top level
(if we end up with one).
Matthew
More information about the R6RS
mailing list