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で変なパスを返しているのがまずいみたいなので、cygwinのbashのパスを埋め込んでやった。
(defun tar-command () #-(or :win32 :mswindows) (find-shell-command *gnu-tar-program*) #+(or :win32 :mswindows) "c:/cygwin/bin/bash.exe")
これで動くは動いたけど・・・。
「動いた」程度だなぁ。