[R6RS] Modules

Manuel Serrano Manuel.Serrano
Wed Nov 10 05:52:54 EST 2004


First of all excuse me for my awful typing. I was probably too much
tired when I wrote this mail...

-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----
at Thu, 4 Nov 2004 08:51:06 -0700, Matthew wrote:
> At Thu, 4 Nov 2004 16:26:51 +0100, Manuel Serrano wrote:
> > There is something that I still don't understand. You suppose that
> > your interpreter/compiler knows enough about modules so that it knows
> > that a module is a list whose third element is a symbol representing a
> > module identifier that is actually required.
> 
> That's true.
> 
> > You not going a step
> > further and state that your interpreter/compiler knows about r6rs modules!
> 
> I'm not sure what you mean. I'm imaging that the interpreter/compiler
> knows about the `module' form, but it makes no assumption about the
> bindings in the `module' body after the language declaration.
What I mean here is that I find pretty artificial to suppose the 
compiler/interpreter knows a little bit about a module declaration but
not all of it. It knows that it is a list, it knows its shape, it knows
that a module is required, that its name is a symbol located at the third
position in the module declaration. It simply does about REQUIRE. I think
that this is artificial.

> > > Or, if you have `include':
> > > 
> > >  (module very-interesting-r4rs-implementation r4rs+provide+include
> > >    (provide ...)
> > >    (include "interesting.scm"))
> > >  
> > >  interesting.scm:
> > >  <your very interesting r4rs code>
> > This is a solution, I agree. It is more or less equivalent to the Mike's 
> > (CODE ...) form. I don't like it very much it supposes that two files
> > are required for every modules.
> 
> Well, I have in mind that `include' is a form that you can put in any
> expression or definition context, and it gets replaced with the content
> of the file. So you wouldn't have to use a separate file.
Hum, I don't understand here. If we assume that the module is located
in a file interesting.bgl, you hence have two files. No? Am I wrong?

> > I don't like very much the INCLUDE of CODE solution because it forces you
> > to right in FILENAME in your code. As I have said, I think that we should
> > avoid that.
> 
> Ok, we fundamentally disagree on this one.
I'm afraid that we do.

> > I still believe that this should be put into a library, but my opinion
> > relies on being able to write macros that expand to `provide'.
> Being able to right macros that expand to PROVIDE is in contradiction 
> with the Mike's proposal.

Yes.

> > However, I don't see how it is related to
> > exporting types. Could you elaborate on that?
> 
> A library could provide a new `provide' form that supports type
> declarations. An implementation of the library might expand to the R6RS
> `provide' and simply drop the type information. The Bigloo
> implementation of the library would ensure that the type information
> gets to the compiler.
> 
> This is probably a moot point, because I don't think we're going to
> agree on a system where a macro can expand to `provide'.
I see your point now but I'm a little bit concern with your argument. If we
think that a module feature X (such as providing type information in PROVIDE 
clause or any extra annotation) is good from a software engineering point
of view, I don't think that it is enough to say that a system S
can re-define PROVIDE or REQUIRE so that its implementation enables X. 
I think that we should go the other way around. That is, if we consider that 
X is good we should encourage people to use it. The best way to do this is 
to standardize a way to talk about it, and taking care to design something
that some implementations can ignore (imagine, for instance, an
"inline" annotation that could be safely ignored).

-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----
at Thu, 4 Nov 2004 12:26:34 -0500 Marc wrote:
> > Ok, we fundamentally disagree on this one.
> 
> I agree with Manuel here.  When filenames are placed in the module,
> the module becomes dependent on the filesystem and where the modules
> are placed and also the filename syntax of the operating system.  This
> goes against the principle of modularity.  I would like people to
> share modules without having to change the filenames in the module to
> suit local filesystem structuring conventions or the structure of the
> system in which they want to use this module.
Yes, that's it. More prosaically I would also add that I would like to
be able to rename files, without changing the code.

> This is why in Snowbird I said we should only allow symbolic names for
> modules, and rely on some mechanism outside of the module to indicate
I definitively agree on that.

> how these symbolic names get mapped to files (or URLs, or ...).  There
> are several possibilities:
> 
> 1) A standard search algorithm, e.g. look in the current directory for
>    a file with the same filename as the module name plus a standard
>    extension (you could use symbolic links to implement a more complex
>    mapping) and if that file does not exist then look in SPAN.
> 
> 2) The mapping is specified to the compiler in a configuration file
>    (either specified explicitly on the compiler's command line or, if
>    none is specified, then in a file in the same directory with a
>    standard name, such as "config.scm").
> 
> 3) A file of code implicitly starts with an (include "config.scm"),
>    if config.scm exists.  If we also have a module indirection
>    form like (module foo "/usr/share/scheme/foo.scm") which indicates
>    in which file the module foo resides, then the config.scm file could
>    contain a set of module indirection forms.
We should leave this out of the R6Rs. This is an implementation issue that
should only rely on implementations only. 

-- 
Manuel


More information about the R6RS mailing list