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"))
削った分はこれから勉強していきたい。