[plt-scheme] conditional module inclusion and compilation

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Wed Sep 2 18:15:14 EDT 2009

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



Posted on the users mailing list.