2019年5月3日金曜日

FreeBSDでCommonLisp

 果たしてroswellにたよらずにやっていけるだろうか。
 なにはともあれ今まで何度も読み返していた「require, ASDF, quicklispを正しく使う」をふたたび、読み返す。いまいち、理解していないんだよなぁ、このあたりの話。roswellにたよってしまっていたのでなおのこと。
 とりあえず、FreeBSD環境にSBCLをインストールした。

sudo pkg install sbcl

 pkgにはほかにも「alexandria」とか、「asdf」とか、もろもろの他、SBCLのパッチがあたっているとおぼしき、バージョンもある。これを使うべきか?
 迷いつつ、SBCLをslimeで使えるように設定して。

(setq inferior-lisp-program "/usr/local/bin/sbcl --noinform")

 立ち上げてみたら「asdf」なんたらの文字が見えた。
 そうか。SBCLの中にasdfが内蔵されているのか。そういえば、ABCLもそうだった。それならpkgでASDFをインストールすることもないか。
 ところがいくらやってみても「~/.config/common-lisp/source-registry.conf 」に定義した内容がcommonlispに反映されない。試行錯誤すること数時間。
 あかんわー。
 自分のミスとは思えない。もしかしたらSBCL内蔵のASDFは「~/.config/common-lisp/source-registry.conf 」は無効になっているのかもしれない。じゃ、どうやって設定すれば、いいんだ?
 「quicklisp1」でもってきたライブラリの場所を認識させたいんだけど2
 つらつら考えて「~/.sbclrc」に設定した。

(asdf::initialize-source-registry
        '(:source-registry
          (:tree "~/quicklisp/dists/") :INHERIT-CONFIGURATION))

 「asdf:find-system」で設定が有効になっていることを確認。
 よし。
 でもREPLで「ql:quickload」が使えないのは不便なので「~/.sbclrc」にさらに設定を追加した。

(load #P"~/quicklisp/setup.lisp")

 あれ、これでroswellからのREPLとほぼ、同じになったんじゃね?
 すくなくともぼくが使うかぎりにおいて。

Footnotes:

1

「quicklisp」はpkgになかったのでhttps://www.quicklisp.org/beta/からもってきて自前でインストール。

2

「~/common-lisp」の下は認識されているから自前のLispはここへ置けば、いいんだけど。