macbook+sbcl+aserve(asdfで入れた)で起動するとSB-THREADがないというエラー。
* (net.aserve:start :port 8888)
debugger invoked on a SIMPLE-ERROR:
PROCESS-PRESET: Calling a multiprocessing function on a single-threaded sbcl build
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
SB-THREAD付きでコンパイルしろということらしい。ソースのINSTALLに書いてある通りに customize-target-features.lispってファイルを作って、中に以下のように書いておく
(lambda (features)
(flet ((enable (x)
(pushnew x features))
(disable (x)
(setf features (remove x features))))
;; Threading support, available only on x86/x86-64 Linux, x86 Solaris
;; and x86 Mac OS X (experimental).
(enable :sb-thread)))
で、インストール。これでOK。
さて、Common Lisp と AllegroServe(Aserve) で作る Web アプリケーションのサンプルを実行してみた。
* (net.aserve:start :port 8888)
#<NET.ASERVE:WSERVER port 8888 {12085CC9}>
* (net.aserve:publish
:path "/"
:content-type "text/html; charset=euc-jp"
:function
#'(lambda (req ent)
(net.aserve:with-http-response
(req ent)
(net.aserve:with-http-body
(req ent)
(net.html.generator:html
(:html
(:head (:title "Hello World!"))
(:body "Hello World!"
:br "こんにちは!")))))))
#<NET.ASERVE:COMPUTED-ENTITY {12E5B679}>
* aserve-accept-6: 01/26/09 - 20:44:57 - accept: error 0 on accept invalid \
keyword argument: :AUTO-CLOSE (valid keys are
:INPUT, :OUTPUT, :ELEMENT-TYPE, :EXTERNAL-FORMAT,
:BUFFERING, :TIMEOUT).
なにがinvalid keyword argumentなのかわからん。linuxに入れたsbclだと快適に動いている(日本語は表示されないけど)。
これが動かないと実践Common Lispが先に進まないんだよなぁ。