This is the mail archive of the guile@cygnus.com mailing list for the guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

A new module system for Guile


Sorry this sounds a little scrambled, I'm sitting graveyard shift in
Japan.

    Jost> /ftp@ftp.tfh-berlin.de:/pub/incoming/module.tar. 

This address doesn't seem to have an FTP server at the moment.  It
translates to lnx05.tfh-berlin.de and then gives "service not
available".

    Jost> It is a full featured module system that uses separate name
    Jost> spaces (every module has its own obarray), total ordering
    Jost> based on the unix file system abstraction (module
    Jost> "peter/test" is differend from "hugo/test"), and is very
    Jost> small and simple.

I wasn't able to get the patches, these comments may be moot. 

If I understand your example, "module" is quite similar to
"define-module" in the current system, except that it takes a unix
file like module name.  

For backward compadibility, it would be nice if you could keep the
same high level user interface with lists that specify the module name
rather than strings that look like files.  I also think that the
module lists (ie '(peter test) instead of "peter/test") look more
schemish, but it's purely subjective.  Do you intend to define
"define-module" on top of "module"?

Same comment for "define*" vs "define-public", it's nice to keep
compatibility. 

Personally I prefer using "define" and "export".  Can "export" be
incorporated?

If I read you example correctly, to access a variable in another
module you use a syntax like: 

(define somewhere (module* "over/rainbow"))
(display somewhere.there)

This would display variable "there" in "over/rainbow".  I like the way
you have module* return a value to refer to the module (I assume it's
the obarray), but the "somewhere.there" syntax seems a little "Cish".
How about something like:

(define somewhere (module* '(over rainbow)))
(display (module-ref somewhere there))

or for the terse

(display (@ somewhere there))

Speaking of "terse", use-module or with-module is a little more
discriptive that module*.

It's really good to get a peek at the new module system.  

Thanks

Clark