原因は不明ながら、slime が急にエラーで動かなくなってしまったので経過をメモ。
(思い出しながら書いているので、あやふやな部分あり)
検索したサイトを見ながら popwin の設定やら ac-slime のインストールやらをしていたら、ある時 M-x slime するとエラーするようになってしまった。
※正確には swank サーバへの接続待ちのままになった。表示通りに M-x slime-abort-connection するとキャンセルされて REPL には入れる。
その状態で (require 'asdf) (require 'alexandria)
すると /usr/share/common-lisp/source/cl-asdf/build/asdf-TMP.lisp が FILE OPEN エラーになってデバッガに入ってしまった。
emacs を終了してコンソールから直接 sbcl で実行しても同じエラーになった。
~/.cache/common-lisp/ を削除してみたが直らず。
apt で slime と cl-asdf を再インストールしてもダメ。
以前に作成した以下のファイルを削除したら slime は起動するようになった。
;;;; ~/.config/common-lisp/source-registry.conf (:source-registry (:tree "~/quicklisp/dists/") :INHERIT-CONFIGURATION)
require
もエラーしなくなった… はず。ただ、相変らず (require 'alexandria)
の返り値が nil だったのでダメかと思って作業を継続した。
この時点で最終結果と同じ状態に戻っていたのかもしれない。
(require 'asdf)
の返り値が nil だったかは覚えていない。
その後、~/quicklisp/ も削除して slime から (load "/usr/share/cl-quicklisp/quicklisp.lisp") (quicklisp-quickstart:install)
で再インストールしてみた。
ここで (ql:quickload 'alexandria)
するとインストールが行われ、(alexandria:lastcar '(a b c))
が動作した。
そのまま更に (ql:add-to-init-file)
を実行して設定ファイル(sbcl だったので ~/.sbclrc)に quicklisp の自動ロードを設定した。
一旦 emacs を再起動し、require
するも返り値は nil のまま。
コンソールから sbcl でやっても同じく nil が返っていたが、何の気なしに alexandria:lastcar
をやってみたら動作した。
ふと思い付いて .sbclrc の quicklisp 設定をコメントアウトしてから、コンソールで (require 'alexandria)
したらエラーになった。
そのまま (load "~/quicklisp/setup.lisp")
したところ alexandria:lastcar
が動作した。
quicklisp 設定をコメントアウトしたままの状態で ~/.config/common-lisp/source-registry.conf をエラー前に戻してみた。
そうしたら (require 'alexandria)
がエラーせずに nil を返し、alexandria:lastcar
も動作するようになった。
元々は .sbclrc の quicklisp 設定はコメントアウトされていたので、結局エラー前と同じ設定に戻ったことになる。
経過から見るとキャッシュを壊していた確率が高いが、問題の原因は特定できず…
とりあえず動作するので、まあいいかと。
最終的にはコンソールでも slime でも以下のように動いている。
(行頭に「?>」があるのがプロンプトと入力内容で、次のプロンプトまでが出力)
?> (require 'asdf)
("ASDF" "asdf" "UIOP" "uiop")
?> (alexandria:lastcar '(a b c))
※以下のエラーが発生した
debugger invoked on a SB-INT:SIMPLE-READER-PACKAGE-ERROR in thread
#
Package ALEXANDRIA does not exist.
Stream: #
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
(SB-IMPL::READER-FIND-PACKAGE "ALEXANDRIA" #
※ 0 でデバッガを終了してトップレベルに戻る
?> (require 'alexandria)
nil
?> (alexandria:lastcar '(a b c))
c
以上。