[plt-scheme] Macros and modules
Due to a discussion on modules and macros and the tricky aspects of
separate compilation I decided to write down the goals of the PLT
module system as described in Flatt's "Composable and Compilable
Macros". To demonstrate the problem I wrote a small example that uses
the portable syntax-case, so it will be easy for users of other
compilers than the PLT one to both read and test the code.
The result can be found in
     <http://www.scheme.dk/macros-and-modules.txt>
and the source files in
     <http://www.scheme.dk/macros-and-modules.tar.gz> .
I am trying to make two points:
    1) the problems of separate compilation occur in real life
       situations
    2) the PLT module system provides one solution
Point 1) is nicely demonstrated, but I can't figure out to compile my
program with mzc. I am hoping I am simply using mzc wrongly, but it
is also quite possible my PLT solution is wrong (this is tricky stuff).
The program runs nicely in MzScheme:
   [soegaard at commander plt]$ mzscheme main.scm
   Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT
   > (require "main.scm")
   3.141592653589793
   1.4142135623730951
   4.555806215962888
   >
But when compile I get this:
   [soegaard at commander plt]$ mzc --exe main main.scm
   MzScheme compiler (mzc) version 205, Copyright (c) 1996-2003 PLT
   [output to "main"]
   [soegaard at commander plt]$ ./main
   reference to undefined identifier: constant
Given "A key feature of the MzScheme module system is that compiling
Metrics [example module] will fail /even when the modules are compiled
in the same session", I had expected this to compile without
problems.
In one particular place in "constants.scm" I wanted to use
   (begin-for-syntax (register-constant 'name
       (eval (expand (syntax-object->datum (syntax exp))))))
but since begin-for-syntax isn't implemted yet, I used this
in stead:
(with-syntax  (((compile-time-register)
                 (generate-temporaries '(compile-time-register))))
   (syntax (define-syntax compile-time-register
             (register-constant 'name
                (eval (expand (syntax-object->datum (syntax exp))))))))))))))
I hope this has the same semantics ?
-- 
Jens Axel Søgaard