Scoop の SBCL を使用する

Scoop で SBCL をインストールしても、sbcl はコアファイルが変なところにあると思っていて探しても見つからないので、 実行できない。

変なところっていうか、インストーラーが既定のパスにしているところなので、変ではないんだけども……。

とりあえず、新しくコアファイルを $HOME/.sbcl に作成することにする。

既定のところに Scoop をインストールしていれば、以下のようなスクリプトでコアファイルを作成できるはず:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[ ! -d $HOME/.sbcl ] && mkdir -p $HOME/.sbcl 

sbcl --core /c/ProgramData/Scoop/apps/sbcl/current/sbcl.core --noinform --no-print --no-userinit <<EOF
; loading asdf and asdf-install library
;(require :asdf)
;(require :asdf-install)

; dumping image
(save-lisp-and-die
 (merge-pathnames ".sbcl/sbcl.core" (user-homedir-pathname))
 :purify t)
EOF

これでコアファイルはできたので、以下のようなハローワールド系コードを実行してみよう:

1
(write-line "Hello, World!")

だが、sbcl は C:/Program Files/sbcl/ に入っているコアファイルを見てしまう。

$ sbcl --script ./hello.lisp
fatal error encountered in SBCL pid 20796(tid 00000000001D68F0):
can't find core file at C:Program Files/sbcl/lib/sbcl//sbcl.core

なので、 --core オプションを指定して先ほど作成したコアファイルを見るようにしてみるとうまくいく。

$ sbcl --core $HOME/.sbcl/sbcl.core --script ./hello.lisp
Hello, World!

読み込むコアファイルを設定ファイルで指定できれば良いのだが……。

SBCL_HOME の指定

調べてみると、 SBCL_HOME という環境変数を指定すれば良いようだ。

上記の例で言えば、以下のようにすれば、 --core オプションの指定が不必要になる:

1
export SBCL_HOME=$HOME/.sbcl
$ sbcl --script ./hello.lisp
Hello, World!

参考