How can I run SBCL code under a Unix-like operatin

2019-03-10 23:14发布

问题:

(David James both wrote the question and an answer. I'll edit it to conform to Stackoverflow standards.)

Using SBCL you can compile Lisp code to machine code.

Like Java, .net, C++ and even C you will need the runtime. So there are two ways to compile Common Lisp code.

First is to make huge binaries which is explained in SBCL documentation. No SBCL needed on target machine.

The other way is a more flexible one, which is to create machine code in a fasl (FASt Load) format. The SBCL runtime is needed on the target machine.

How does the second way work under a Unix-like operating system?

回答1:

(Answer by David James:)

We are going to make two commands in our system: one for batch compiling Lisp code and the other for easily running Lisp code:

Using your favorite editor, open a file called sbcl.compile. The content should be:

    #!/bin/bash
    sbcl --noinform --eval "(compile-file \"$1\")" --eval "(quit)" > /dev/null

Now to compile Lisp files use:

    # sbcl.compile hello.lisp

This will create a hello.fasl file.

Now to easily run these files, we create a new command. Using your favorite editor open a file called sbcl.run. The content should be:

    #!/bin/bash
    sbcl --noinform --load "$1" --quit --end-toplevel-options "$@"

Now you may invoke sbcl.run hello.fasl to run the native code.

    # sbcl.run hello.fasl

Details are described in the SBCL manual: Starting SBCL



回答2:

Another option is to add to the runtime all packages/functions/frameworks that you commonly use, and then save this state as a new core file, and use this as your default core while continuing development. I usually find fasls more trouble than they are worth, especially since lisp has the ability to save state in a VM-style core file. I just incrementally update the core as development moves along. And rebuild/update the core using GNU Make.