fu7mu4’s diary

はてなダイアリーから移転しました。

quicklisp で save-application by Clozure CL はこれでいいの?

quicklisp で (ql:quickload :cl-ppcre) した場合 実行形式をつくるには、どうするとスマートなんだろう。

環境

Clozure Cl (macport 64bit version)

ccl64 --version

Version 1.9 (DarwinX8664)

quickload していないとき

clozure clで こんなファイルをつくって

(defun hello-world-2 ()
  (format t "Hello, world!"))

(ccl:save-application "hello.x"                          ;; 実行ファイル名
		      :toplevel-function #'hello-world-2 ;; 実行する関数 
		      :prepend-kernel t)

こんなかんじで、実行ファイルが作成できる。

ccl64 --no-init --load hello-world2.lisp
./hello.x

実行すると、こうなる

Hello, world!

quickload したとき

では、quicklisp で (ql:quickload :cl-ppcre) した場合はどうなるのだろう。

失敗例
(ql:quickload :cl-ppcre) ;; quicklispで パッケージを読み込む

(defun hello-world-2 ()
  (format t "Hello, world!"))

(ccl:save-application "hello.x"
		      :toplevel-function #'hello-world-2
		      :prepend-kernel t)
ccl64 --no-init --load hello-world2.lisp

qlってなんだよっていわれてしまう。 quickloadの設定がClozure CLの設定ファイルに書いてあるのだろう。

成功例1
ccl64 --load hello-world2.lisp

こうすると、実行ファイルができる。

その他の成功例

または、slimeでccl:save-applicationを書いたバッファをC-cC-kすると、実行ファイルができるんだけど、swnkと接続が切れてしまう。

もしくは、ccl:save-applicationを書いていないバッファをslimeでC-cC-kしてから、REPLのプロンプトで

(ccl:save-application "hello.x" :toplevel-function #'hello-world-2
			       :prepend-kernel t)

と入力すると、

; Evaluation aborted on #<PROCESS-RESET #x3020012A77BD>.

と表示されてから、やっぱりswnkと接続が切れてしまう。
swnkと接続が切れてしまったらM-x slimeすればもとどおりなんだけど、これでいいのだろうか?