Next: , Up: Compiling   [Contents][Index]


6.5.1 Compiling to a set of .class files

Invoking ‘kawa’ (or ‘java kawa.repl’) with the ‘-C’ flag will compile a ‘.scm’ source file into one or more ‘.class’ files:

kawa --main -C myprog.scm

You run it as follows:

kawa [-d outdirectory] [-P prefix] [-T topname] [--main | --applet | --servlet] -C infile ...

Note the ‘-C’ must come last, because ‘Kawa’ processes the arguments and options in order,

Here:

-C infile ...

The Scheme source files we want to compile.

-d outdirectory

The directory under which the resulting ‘.class’ files will be. The default is the current directory.

-P prefix

A string to prepend to the generated class names. The default is the empty string.

-T topname

The name of the "top" class - i.e. the one that contains the code for the top-level expressions and definitions. The default is generated from the infile and prefix.

--main

Generate a main method so that the resulting "top" class can be used as a stand-alone application. See Application compilation.

--applet

The resulting class inherits from java.applet.Applet, and can be used as an applet. See Applet compilation.

--servlet

The resulting class implements javax.servlet.http.HttpServlet, and can be used as a servlet in a servlet container like Tomcat.

When you actually want to load the classes, the outdirectory must be in your ‘CLASSPATH’. You can use the require syntax or the load function to load the code, by specifying the top-level class, either as a file name (relative to outdirectory) or as a class name. E.g. if you did:

kawa -d /usr/local/share/java -P my.lib. -T foo -C foosrc.scm

you can use either:

(require my.lib.foo)

or:

(load "my.lib.foo")

Using require is preferred as it imports the definitions from my.lib.foo into the compile-time environment, while load only imports the definitions into the run-time environment.

If you are compiling a Scheme source file (say ‘foosrc.scm’) that uses macros defined in some other file (say ‘macs.scm’), you need to make sure the definitions are visible to the compiler. One way to do that is with the ‘-f’:

kawa -f macs.scm -C foosrc.scm

Many of the options described earlier are relevant when compiling. Commonly used options include language selection, the --warn-xxx options, and --full-tailcalls.


Next: , Up: Compiling   [Contents][Index]