2008/05/03

[Common Lisp] SBCL 環境 ライブラリ ~/.sbclrc

Common Lisp のライブラリ環境をそろえるのに幾つか方法があると思うが、私がどうしているかを書いておく。

Debian を使用。基本的に Debian のパッケージがあるものは Debian のパッケージを使う。

パッケージのないもの、あっても最新バージョンが欲しいものは~/letter/lisp/lib の下に各リポジトリからチェックアウトしている。Common Lisp 界は darcs が多かったけど git が主流になりつつある気がする。それらを asdf:*central-registry* に登録するために下記のようにcl-fad を使っている。

Debian パッケージもリポジトリの公開もないものは asdf-insatll している。

あとライブラリを探すときは CLikiThe Common Lisp Directory を参照する。

~/.sbclrc はこうなっている。

;;;;; -*-lisp-*-

;;デバッグ用セッティング
(declaim (optimize debug safety))

;; for debug
(defmacro p (&body body)
`(progn ,@(mapcar #'(lambda (arg)
`(format t "~30a ; => ~a~%" ',arg ,arg))
body)))

(setf (logical-pathname-translations "ancient")
`(("**;*.*" "/home/ancient/letter/lisp/**/*.*")))

;; for tama
(pushnew (translate-logical-pathname "ancient:web;tama;")
asdf:*central-registry* :test 'equal)

;; ~/letter/lib 以下の asd を登録する。
(require :cl-fad)
(cl-fad:walk-directory
(translate-logical-pathname "ancient:lib;")
#'(lambda (path)
(let ((pd (pathname-directory path)))
(unless (member "_darcs" pd :test #'equal)
(pushnew
(make-pathname :directory pd)
asdf:*central-registry*
:test #'equal))))
:test #'(lambda (path)
(string-equal "asd" (pathname-type path))))

;;; If the first user-processable command-line argument is a filename,
;;; disable the debugger, load the file handling shebang-line and quit.
(let ((script (and (second *posix-argv*)
(probe-file (second *posix-argv*)))))
(when script
;; Handle shebang-line
(set-dispatch-macro-character #\# #\!
(lambda (stream char arg)
(declare (ignore char arg))
(read-line stream)))
;; Disable debugger
(setf *invoke-debugger-hook*
(lambda (condition hook)
(declare (ignore hook))
;; Uncomment to get backtraces on errors
;; (sb-debug:backtrace 20)
(format *error-output* "Error: ~A~%" condition)
(quit)))
(load script)
(quit)))

他の人たちはどうしてるんだろう?

0 件のコメント: