[plt-scheme] conditional module inclusion and compilation
I've developed some code in DrScheme under Mac OS X that I also want
to run sometimes under Linux -- it's computationally intensive stuff
and I'll want to do development runs on my mac but then do lots of
bigger runs on our Linux cluster.
I have some graphics in the Mac OS X version that I don't know how to
produce in my command-line/text-based Linux environment, but I don't
need the graphics there anyway. The graphics are just plots of
progress which are useful when I'm developing and watching a run, but
the cluster runs produce text files of data which are good enough. So
to get the code working on the cluster I just removed "(require plot)"
and all of the code that called anything from the plot module.
That worked but I don't want to have to do this kind of surgery on the
code every time I move it to the cluster, which I'll be doing
frequently. Ideally I'd like to be able to write my code in such a way
that it knows where it's running and it includes the plot module and
calls the plot code only if it's running somewhere appropriate. I do
this in Common Lisp by using the #+: and #-: conditional compilation
syntax and/or by looking for things in the variable *features*, which
includes symbols that describe the environment. Is there anything
similar in PLT?
I wouldn't mind having to manually change a flag to indicate the
environment, e.g. to change the value in something like:
(define include-plots-in-reports #t)
But this doesn't actually help for two reasons:
- PLT won't let me wrap a call to "require" in a conditional
expression -- it complains that it's not at the top level.
- If I comment out the "require" PLT still won't compile a file
containing calls to functions in the missing module, even if those
calls are never executed.
So whether my code knows where it's running or whether I have to tell
it manually, I don't have a way of moving it to the Linux environment
without manually editing out the "require" and all of the code that
refers to the plot module.
Is there a good way to deal with this kind of thing in PLT that I'm
missing?
Thanks,
-Lee
--
Lee Spector, Professor of Computer Science
School of Cognitive Science, Hampshire College
893 West Street, Amherst, MA 01002-3359
lspector at hampshire.edu, http://hampshire.edu/lspector/
Phone: 413-559-5352, Fax: 413-559-5438
Check out Genetic Programming and Evolvable Machines:
http://www.springer.com/10710 - http://gpemjournal.blogspot.com/