[plt-scheme] conditional module inclusion and compilation
Just run the program in mred on linux. You will be fine -- Matthias
On Sep 2, 2009, at 6:08 PM, Lee Spector wrote:
>
> Ah -- (system-type) is nice, and I'm not at all worried about the
> cost of a few calls to void.
>
> But I still don't see how to make this work because I have to have
> (require plot) in the file to make the plots work in macosx,
> (require plot) breaks under Linux ("dynamic-require: unknown module:
> '#%mred-kernel; need to run in mred instead of mzscheme"), and I
> can't wrap (require plot) in a conditional ("require: not at module
> level or top level in: (require plot)"). While I could comment out
> and uncomment the (require plot) I'd have a similar problem with the
> calls to the functions in the plot module, even if they are wrapped
> in conditions that prevent them from being executed in the wrong
> (system-type).
>
> Just saw that Eli sent some additional info...
>
> -Lee
>
> On Sep 2, 2009, at 5:52 PM, Matthias Felleisen wrote:
>
>>
>> Would
>>
>>> Welcome to MzScheme v4.2.1.7 [3m], Copyright (c) 2004-2009 PLT
>>> Scheme Inc.
>>> > (system-type)
>>> macosx
>>
>> help you get started? If you can tolerate a call to void for plots
>> on the cluster, I'd use an abstraction over the graphics. If you
>> want to see the tracker, pass in draw-progress-report (or whatever
>> you call the graphics function); otherwise pass in void instead.
>>
>> If the extra call costs too much, I'd write a macro that unfolds in
>> one way on a mac and in a different way on a linux box.
>>
>> -- Matthias
>>
>>
>>
>>
>>
>>
>>
>> On Sep 2, 2009, at 5:34 PM, Lee Spector wrote:
>>
>>>
>>> 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/
>>>
>>> _________________________________________________
>>> For list-related administrative tasks:
>>> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> --
> 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/
>
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme