I second Brad's comment. Support for hygienic macros should be on the feature list (you can still provide unhygienic macros as well). This is important because it requires changes to the evaluator (I think), and is something that can't be added on.
Your module system looks cool, Marc. I built something on top of Gambit's namespaces a while ago as well. It uses Scheme48's module language however (which I am partial to). Whenever we get Gambit's low-level module system built the first thing I hope to do is write a scheme48-like module language on top of it!
I hit one major problem with namespaces, however, which your module system is also prone to since it's built on top of the namespaces. I posted a message to this list a while ago about it:
https://webmail.iro.umontreal.ca/pipermail/gambit-modules-list/2009-January/...
Basically, something's a little funky with how DEFINE expressions are evaluated. When the evaluator evaluates the identifier provided to DEFINE, it can evaluate to an identifier in a different namespace. See my post above for examples with the namespace mechanism. I haven't had time to look through Gambit's source to understand why this happens. Here are a few examples in your system:
EXAMPLE 1 (wrongly overrides another library):
(##module library1 gambit (export foo bar))
(define (foo) (display "[library1] foo'ing\n"))
(define (bar) (display "[library1] bar'ing\n") (foo))
******
(##module library2 gambit) (##use library1)
(define (foo) (display "[library2] foo'ing (this should never be called)\n"))
(display "[library2] calling out to BAR in library1\n") (bar)
% gsi -e '(include "modules.scm")' foo.scm [library2] calling out to BAR in library1 [library1] bar'ing [library2] foo'ing (this should never be called)
EXAMPLE 2 (dangerously overrides a global function):
(##module library1 gambit (export foo bar))
(define (integer->char i) (display "bar#integer->char\n"))
*******
(##module library2 gambit) (##use library1)
(integer->char 5)
% gsi -e '(include "modules.scm")' library2.scm bar#integer->char
- James