common lisp on Mac (Part 1: 環境部署)
1. Choose clisp implement
list: clisp implement
sbcl (Steel Bank Common Lisp) 是速度最快的實作,一般來說是首選。想要比較成熟的 repl (像是 tab auto complete),可以考慮 clisp。但注意許多 common-lisp library 編譯時是會挑 clisp implement 的,像是 weblocks 在 sbcl 上就編譯得很順利,但在 clisp (install from brew) 上就會抱怨沒有開啟 FFI。雖說系統可以同時安裝不同的 clisp implement,但是 Quicklisp 目前只支援部署給一個特定的 clisp implement,也就是說,最好選定一個特定的 lisp 實作。在此先不考慮其他的 lisp dialects (諸如 clojure or scheme)。
install sbcl
install sbcl from HomeBrew. rlwrap from better repl experience.
brew install sbcl rlwrap
2. Package manager: Quicklisp
Base on ASDF, 根據官方說法, ASDF is a little like make and Quicklisp is a little like a Linux package manager.
install Quicklisp
curl -O http://beta.quicklisp.org/quicklisp.lisp
rlwrap sbcl --load quicklisp.lisp
and then in sbcl repl
(quicklisp-quickstart:install)
(ql:add-to-init-file)
3. interactive repl
SBCL 官方推薦的 repl 是 emacs + slime ,不意外。大部分的 lisp dialects 好像也都很喜歡用這個組合,可能有其歷史因素在,但總覺得這樣的組合有點 overkill。要特別注意的是, quicklisp-slime-helper 預設使用 quicklisp 的 slime,如果 Emacs 自己用 elpa 另外裝了 slime 就會引發錯誤。
install Emacs from brew:
brew install emacs
install slime from Quicklisp
; search avalible package
(ql:system-apropos "slime")
;; => #<SYSTEM quicklisp-slime-helper / quicklisp-slime-helper-20110418-git / quicklisp 2014-08-26>
; install package
(ql:quickload :quicklisp-slime-helper)
並將下列設定加到 .emacs.d/init.el 中。接下來就可以由 M-x slime-mode
進入 sbcl 的 repl 了。基本的語言支援可考慮用 M-x package-install RET starter-kit-lisp RET
。
(load (expand-file-name "~/quicklisp/slime-helper.el"))
;; Replace "sbcl" with the path to your implementation
(setq inferior-lisp-program "/usr/local/bin/sbcl")
(require 'slime)
(slime-setup)
Now Enjoy sbcl’s repl !!
不過掃興的說,slime repl 超肥,一開 CPU 使用率就有 5-10% 了。對筆電來說任何無謂的 cpu usage 都是罪惡,為了這個我對 clisp repl 的好感度直線上升。
接下來的目標是介紹 common lisp 的學習資源。