windowsのcommonlisp処理系て何がいいんだろう

linuxでSBCLを使っててそれはそれでいいんだけど。
windowsでもSBCLだったんだけど、Asdf-Installが動いてくれないのがイヤになってきた。
windowsではスレッドも動かないし・・・。

http://read-eval-print.blogspot.com/2007/08/common-lisp-windows-sbcl-asdf-install.html
を参考にがんばってみたけど、やっぱうまくいかない。

ほかに何かないかなぁ、と思いAllegro common lisp を試してみた。
これがまた大変だったよ。。。

●ダウンロードしてインストール
これは簡単

●Slimeとの連携
さっそくハマる。
コンソールで動かすためにmlisp.exeを作らなきゃいけないみたいで、READMEに作り方が書いてある・・・、んだけどここに書いてあるスクリプトが間違ってるらしいorz。
sys:allegro-ansi-express.exeがないので、allegro-express.exeに変える。

  ;; mlisp:
  (progn
    (build-lisp-image "sys:mlisp.dxl" :case-mode :case-sensitive-lower
                      :include-ide nil :restart-app-function nil
        :restart-init-function nil)
    (when (probe-file "sys:mlisp.exe") (delete-file "sys:mlisp.exe"))
    (sys:copy-file "sys:allegro-express.exe" "sys:mlisp.exe"))

  ;; alisp:
  (progn
    (build-lisp-image "sys:alisp.dxl" :case-mode :case-insensitive-upper
                      :include-ide nil :restart-app-function nil
        :restart-init-function nil)
    (when (probe-file "sys:alisp.exe") (delete-file "sys:alisp.exe"))
    (sys:copy-file "sys:allegro-express.exe" "sys:alisp.exe"))

  ;; allegro:
  (progn
    (build-lisp-image "sys:allegro.dxl" :case-mode :case-sensitive-lower)
    (when (probe-file "sys:allegro.exe") (delete-file "sys:allegro.exe"))
    (sys:copy-file "sys:allegro-express.exe" "sys:allegro.exe"))

で、slimeとの連携なんだけど、これもわけわかんない。
結局は.emacs

(push "C:/cygwin/home/xxx/.slime/" load-path)
(require 'slime)
(slime-setup)

(setq slime-multiprocessing t)
(setq *slime-lisp* "mlisp.exe")
(setq *slime-port* 4005)

(defun slime ()
  (print "this is my slime")
  (interactive)
  (shell-command 
   (format "%s +B +cm -L c:/cygwin/home/xxx/.slime.lisp -- -p %s --ef %s &"
    *slime-lisp* *slime-port*
    slime-net-coding-system))
  (delete-other-windows)
  (while (not (ignore-errors (slime-connect "localhost" *slime-port*)))
    (sleep-for 0.2)))

で、.slime.lisp

(load "C:\\meadow\\site-lisp\\slime-2.0\\swank-loader.lisp")
(swank::create-server)

で動くようになった。

asdf-install
これがまたハマる。
ロードの仕方が良く分かってないのは俺が悪いんだけどさ。

cl-user> (require 'asdf)
cl-user> (pushnew "C:/Program Files/acl81-express/src/asdf-install/" asdf:*central-registry* :test #'equal)
cl-user> (asdf:operate 'asdf:compile-op 'asdf-install)
cl-user> (asdf:operate 'asdf:load-op 'asdf-install)

でロードしてあとは

(asdf-install:install 'xxx)

でいける・・・かと思いきや、うまくいかない。
asdf-installのinstall.lispのtar-commandで変なパスを返しているのがまずいみたいなので、cygwinbashのパスを埋め込んでやった。

(defun tar-command ()
  #-(or :win32 :mswindows)
  (find-shell-command *gnu-tar-program*)
  #+(or :win32 :mswindows)
  "c:/cygwin/bin/bash.exe")

これで動くは動いたけど・・・。
「動いた」程度だなぁ。