Gauche can be used either as an independent Scheme interpreter
or as an embedded Scheme library. The interpreter
which comes with Gauche distribution is a program named
Gauche’s interpreter. Without scheme-file,
interactively, i.e. it reads a Scheme expression from the standard input,
evaluates it, and prints the result, and repeat that until it reads EOF or
gosh is invoked without scheme-file, but the input
is not a terminal, it enters read-eval-print loop but not writes
out a prompt while waiting input form. This is useful when you
pipe Scheme program into
gosh. You can force this behavior
or suppress this behavior by
If scheme-file is specified,
gosh runs it as a
Scheme program and exit.
See Writing Scheme scripts, for details.
The following command line options are recognized by
The first command line argument which doesn’t begin with ‘-’
is recognized as the script file. If you want to specify a file
that begins with a minus sign, use a dummy option ‘
Prepends path to the load path list. You can specify this option more than once to add multiple paths.
Appends path to the tail of the load path list. You can specify this option more than once to add multiple paths.
gosh not to load the default initialization file.
gosh version and exits.
If version is not the running
gosh’s version, execute the
specified version of
gosh instead if it is installed.
This is useful when you want to invoke specific version of Gauche.
Note that version must be 0.9.6 or later.
Use module. Before starting execution of scheme-file or entering
the read-eval-print loop, the specified module is used, i.e.
it is loaded and imported (See Defining and selecting modules, for details of
You can specify this option more than once to use multiple modules.
Load file before starting execution of scheme-file or entering
the read-eval-print loop. The file is loaded in the same way as
load (see Loading Scheme file).
You can specify this option more than once to load multiple files.
Load file like
-l, but if file does not exist,
this silently ignores it instead of reporting an error.
This option can also be specified multiple times.
Evaluate scheme-expression before starting execution of scheme-file or entering the read-eval-print loop. Evaluation is done in the interaction-environment (see Eval and repl). You can specify this option more than once to evaluate multiple expressions.
Same as -e, except the scheme-expression is read as if it is surrounded by parenthesis. For example:
% gosh -umath.const -E"print (sin (* pi/180 15))" -Eexit 0.25881904510252074
Batch. Does not print prompts even if the input is a terminal.
Interactive. Print prompts even if the input is not a terminal.
When a script file is given,
this option makes the module named module in which
main procedure is looked for, instead of the
See Writing Scheme scripts for the details of executing scripts.
If the named module doesn’t exist after loading the script, an error is signaled.
This is useful to write a Scheme module that can also be executed as a script.
This option controls compiler and runtime behavior. For now we have following options available:
Prohibits the compiler from inlining procedures and constants. Equivalent to no-inline-globals, no-inline-locals, no-inline-constants and no-inline-setters combined.
Prohibits the compiler from inlining global procedures.
Prohibits the compiler from inlining local procedures.
Prohibits the compiler from inlining constants.
Prohibits the compiler from inlining setters.
Prohibits the compiler from running post-inline optimization pass.
Prohibits the compiler from running lambda-lifting pass.
Reports whenever a file is loaded. Useful to check precisely which files are loaded in what order.
Reports whenever a file is included. Useful to check precisely which files are included in what order.
Warns if the reader sees leagacy hex-escape syntax in string literals. See Reader lexical mode.
Don’t keep source information for debugging. Consumes less memory.
Ignore case for symbols. See Case-sensitivity.
../src" and "
../lib" to the load path before loading
initialization file. This is useful when you want to test the
gosh interpreter inside source tree, without installing it.
Turn on the profiler. The following profiler-option is recognized:
Records and reports time spent on function calls and number of times each function is called.
Records and reports time spent on loading each modules. Useful to tune start-up time of the scripts. (Results are in elapsed time).
See Using profiler for the details of the profiler.
gosh with an environment of the specified revision
of Scheme standard. Currently only 7 is supported as
gosh starts with
user module, which inherits
gauche module. That means you can use whole Gauche core
procedures by default without explicitly declaring it.
Proper R7RS code always begins with either
import form, and Gauche recognizes it and
automatically switch to R7RS environments so that R7RS scripts and libraries
can be executed by Gauche without special options.
However, users who are learning R7RS Scheme may be confused
when the initial environment doesn’t look like R7RS.
gosh starts with
that extends the
r7rs module, which defines two R7RS forms,
If you invoke
gosh into an interactive REPL mode with
all standard R7RS-small libraries (except
(scheme r5rs) are already
imported for your convenience.
See Library modules - R7RS standard libraries, for the details on how Gauche supports R7RS.
-r7 option doesn’t change reader lexiacl mode
(see Reader lexical mode) to
strict-r7. That’s because
strict-r7 mode by default prevents many Gauche code
from being loaded.)
gosh sees this option, it stops processing the options
and takes next command line argument as a script file. It is useful
in case if you have a script file that begins with a minus sign,
although it is not generally recommended.
The options -I, -A, -l, -u, -e and -E are processes in the order of appearance. For example, adding a load path by -I affects the -l and -u option after it but not before it.
The following environment variables are recognized:
You can specify additional load paths by this environment
variable, delimiting the paths by ’
The paths are appended before the system default load paths.
See Loading Scheme file, for the details of how Gauche finds files to load.
You can specify additional load paths for dynamically loaded
objects by this environment variable, delimiting the paths by ’
The paths are appended before the system default load paths.
See Loading dynamic library, for the details of how Gauche finds dynamically loadable objects.
You can get the number of system’s processors by
sys-available-processors (see Environment Inquiry);
libraries/programs may use this info to optimize number of
parallel threads. But you might change that, for testing
and benchmarking—e.g. a program automatically uses
8 threads if there are 8 cores, but you might want to run it
with 1, 2, 4 threads as well to see the effect of parallelization.
This environment variable overrides
the return value of
These two environment variables affect whether keywords are treated as symbols or not. See Keywords, for the details.
These may affect the return value of
Different environment variables may be used on different platforms.
See Pathnames, for the details.
Suppress system warnings (
WARNING: ...). Not generally recommended;
use only if you absolutely need to.
On Windows-native platforms (mingw), two interpreter executables are
gosh.exe is compiled as a Windows console
application and works just like ordinary
gosh; that is,
it primarily uses standard i/o for communication.
gosh-noconsole.exe, is compiled
as a Windows no-console (GUI) application. It is not attached
to a console when it is started. Its standard input is connected
NUL device. Its standard output and standard error
output are special ports which open a new console when something
is written to them for the first time. (NB: This magic only works
for output via Scheme ports; direct output from low-level C libraries
will be discarded.)
The main purpose of
gosh-noconsole.exe is for Windows
scripting. If a Scheme script were associated to
and invoked from Explorer, it would always open a new
console window. However,
this console would be of little use, since
it would dissapear once the script exits, and the user wouldn’t
be likely to have enough time to look at it.
If you associate Scheme scripts to
you can avoid this annoying console from popping up.
If you’re using the official Windows installer, Scheme scripts
(*.scm) have already associated to
and you can invoke them by double-clicking on Explorer.
Check out some examples under C:\Program Files\Gauche\examples.