What is the proper way to set runtime settings for a compiled scheme program? Does an executable compiled with:
gsc -:tl myfile.scm
"inherit" the -:tl setting?
Likewise for c initiated scheme apps? by setting the setup struct's members?
Thanks, Ryan
Afficher les réponses par date
On 27-Jul-06, at 5:04 PM, Ryan Prescott wrote:
What is the proper way to set runtime settings for a compiled scheme program? Does an executable compiled with:
gsc -:tl myfile.scm
"inherit" the -:tl setting?
No it doesn't. However, if you write your program as a script, that is it starts with a line with "#! gsi ..." (on Unix) or "@; gsi ..." (on Windows) then the compiled program will set the same runtime options as the one specified to the script interpreter, unless it is overridden with an explicit "-:..." options when the program is started. Note that the script interpreter will not be executed by the compiled program, the first line is only parsed by the compiler to get the default runtime options.
Here's a detailed example. Let's say you want the program to use CR- LF as the end-of-line encoding for all file I/O by default. You would write "myfile.scm" as a script like this (on Unix):
#! gsi-script -:fcl (define (main) (display "hello\n"))
then you would compile and execute it like this:
% gsc myfile.scm % gcc myfile.c myfile_.c -lgambc -lm -ldl -lutil % ./a.out | od -a 0000000 h e l l o cr nl 0000007
The nice thing about this way of getting the default runtime options is that you get the same result as executing the script:
% chmod +x myfile.scm % ./myfile.scm | od -a 0000000 h e l l o cr nl 0000007
Yet another approach is to set the GAMBCOPT environment variable:
% export GAMBCOPT=tcl
Gambit compiled programs executed after this will use the default runtime options "-:tcl" (these can be overridden on the program command line).
Likewise for c initiated scheme apps? by setting the setup struct's members?
Yes you can do that, for example:
#define MY_LINKER ____20_myprog__
___BEGIN_C_LINKAGE extern ___mod_or_lnk MY_LINKER (___global_state_struct*); ___END_C_LINKAGE
void setup_gambit () { ___setup_params_struct setup_params;
___setup_params_reset (&setup_params);
setup_params.version = ___VERSION; setup_params.linker = MY_LINKER;
/* set UTF-8 character encoding for file I/O */
setup_params.file_settings = ___FILE_SETTINGS_INITIAL; setup_params.file_settings = ___CHAR_ENCODING_MASK (setup_params.file_settings) |___CHAR_ENCODING_UTF_8;
___setup (&setup_params); }
Marc