sbclのコア作り、SLIME起動時間短縮

SBCL - Steel Bank Common Lispを参考にsbclのコア(イメージファイル)を作る。
俺はまだまだ彼ほど熟知していないのでpre-loadするライブラリは限られている。そこから削る削る。
そのかわりs-utils, arnesiをpre-loadしてみる。


(load "/usr/share/common-lisp/source/slime/swank-loader.lisp" :verbose t)
がSLIME起動時に出ていたので、こいつもpre-loadしておく。

;; (eval-when (:load-toplevel :execute)
(progn
  (require :asdf)
  (require :asdf-install)
;;   (require :sb-rotate-byte)
;;   (require :sb-md5)
;;   (require :sb-posix)
;;   (require :sb-rt)
;;   (require :sb-simple-streams)
;;   (require :sb-bsd-sockets)
  ;; (require :sb-aclrepl)
)
(pushnew
  (merge-pathnames "lisp/asd/" (user-homedir-pathname))
  asdf::*central-registry*)

;; (asdf:oos 'asdf:load-op :cl-fad)
;; (asdf:oos 'asdf:load-op :cl-interpol)
(asdf:oos 'asdf:load-op :cl-ppcre)
;; (asdf:oos 'asdf:load-op :cl-who)
;; (asdf:oos 'asdf:load-op :html-template)
;; (asdf:oos 'asdf:load-op :iterate)
;; (asdf:oos 'asdf:load-op :unification)
;; (asdf:oos 'asdf:load-op :cl-dot)
;; #-sbcl (asdf:oos 'asdf:load-op :md5)
;; (asdf:oos 'asdf:load-op :xmls)
;; (asdf:oos 'asdf:load-op :s-xml)
;; (asdf:oos 'asdf:load-op :s-xml-rpc)
;; (asdf:oos 'asdf:load-op :cffi)
;; (asdf:oos 'asdf:load-op :cffi-uffi-compat)
;; (asdf:oos 'asdf:load-op :yacc)
;; (asdf:oos 'asdf:load-op :kmrcl)
;; (asdf:oos 'asdf:load-op :cl-plus)
(asdf:oos 'asdf:load-op :cl-utilities)
;; (asdf:oos 'asdf:load-op :json)
;; (asdf:oos 'asdf:load-op :fiveam)
;; (asdf:oos 'asdf:load-op :screamer)
;; (asdf:oos 'asdf:load-op :log4cl)
;; (asdf:oos 'asdf:load-op :series)
;; (asdf:oos 'asdf:load-op :ironclad)
;(asdf:oos 'asdf:load-op :swank)
(load "/usr/share/common-lisp/source/slime/swank-loader.lisp" :verbose t)
;; #+nil
;; (progn
;;   (asdf:oos 'asdf:load-op :uffi)
;;   (asdf:oos 'asdf:load-op :clsql)
;;   (asdf:oos 'asdf:load-op :clsql-uffi)
;;   (asdf:oos 'asdf:load-op :clsql-sqlite3)
;;   (asdf:oos 'asdf:load-op :curl)

;;   (asdf:oos 'asdf:load-op :puri)
;;   (asdf:oos 'asdf:load-op :acl-compat)
;;   (asdf:oos 'asdf:load-op :htmlgen)
;;   (asdf:oos 'asdf:load-op :aserve)
;;   (asdf:oos 'asdf:load-op :webactions))

;; (asdf:oos 'asdf:load-op :lw-compat)
;; (asdf:oos 'asdf:load-op :closer-mop)
;; (asdf:oos 'asdf:load-op :contextl)
;; (asdf:oos 'asdf:load-op :cldoc)
;; (asdf:oos 'asdf:load-op :html-encode)
;; (asdf:oos 'asdf:load-op :colorize)
;; (asdf:oos 'asdf:load-op :cxml)
;; #+clisp (asdf:oos 'asdf:load-op :clisp-sqlite)
;; (asdf:oos 'asdf:load-op :rt)

;; (asdf:oos 'asdf:load-op :clsql)
;; (asdf:oos 'asdf:load-op :clsql-uffi)
;; (clsql-sys::push-library-path #p"/usr/lib/")
;; (asdf:oos 'asdf:load-op :clsql-sqlite3)

;; (asdf:oos 'asdf:load-op :iso8601-date)
;; (asdf:oos 'asdf:load-op :local-time)
;; (asdf:oos 'asdf:load-op :cl-store)
;; (asdf:oos 'asdf:load-op :cl-prevalence)
;;(load (merge-pathnames "lisp/unstable/lisa/install.lisp" (user-homedir-pathname)))

;; (asdf:oos 'asdf:load-op :lisa)
;; (load (merge-pathnames "lisp/lib/common/XML/Load-XMLisp.lisp" (user-homedir-pathname)))

(require :s-utils)
(require :arnesi)

(loop repeat 10 do (gc :full t))
(let ((core (merge-pathnames "sbcl/main.core"
;;                             (or (sb-posix:getenv "SBCL_HOME") "/r/lisp"))))
                             "/r/lisp/")))
  (save-lisp-and-die core :purify t))
;; (exit)

あとは touch /r/lisp/dummy.lisp (空のファイル作成)してから.emacsに以下を追加しておけば起動が一瞬。

(when (equal inferior-lisp-program "sbcl")
  (setq slime-backend "/r/lisp/dummy.lisp"))

削った分はこれから勉強していきたい。

ちなみに /r はホームディレクトリで、環境 SBCL_HOME は /r/lisp に設定してある。