FC2ブログ
--.--
--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

06.01
Sat
忘備録です


SBCLについて、実行の仕方いろいろについてです

スクリプトで実行

shebangで実行できます

#!/usr/local/bin/sbcl --script

(format t "hello, world~%")

実行権限を与えて

$ ./file.lisp

みたいな感じで実行できるはずです.

もしくは普通にシェルで

$ sbcl --script file.lisp

とかやります

けどスクリプトとして実行してる時ってuserinitがされないぽいので

つまり自分のホームディレクトリ以下の.sbclrcが読まれないので

だいたいそこに書いてあるだろうquicklispの設定とかが読まれない

そうなると、ライブラリとか使ってた場合quickloadするとPackage QL does not exist

みたいになってしまう

で、じゃあ明示的にスクリプトの先頭で.sbclrcなりquicklispのsetup.lispを読ませるんだけど

それって正しいやり方なのだろうか...

で例えば以下みたいなやつを実行したかったら


;;;; drakmaで適当なサイトにアクセスしてhttpのheaderを表示

(ql:quickload :drakma)

(defun print-header (url &optional (strm t))
  (multiple-value-bind 
	(body status header)
	(drakma:http-request url)
	 (declare (ignore body status))
  	 (format strm "- HEADER -~%~{~A~%~}" header)))


(defun main nil 
  (print-header "http://www.yahoo.co.jp/"))

(main)


① 先頭に(load "~/.sbclrc")みたいにしてquicklispの設定を読んで

  drakmaのquickloadで落ちないようにしてscriptとして実行する

② このコードをreplにloadさせて実行する

③ もしくはかなりでかい実行バイナリを作る

になるのだろうか...

①の方法は簡単なので省略

②はシェルでsbcl開いて(load "filename.lisp")ってやって評価させる

賢く?やるならこんな感じかな

sbcl --noinform --quit --load "filename.lisp"

だけど①,②の方法だと

To load "drakma":
  Load 1 ASDF system:
    drakma
; Loading "drakma"
......

こんな感じのメッセージが出てうざったいなぁ...

③は少しさっきのコードをこんな感じに変更してしてスタンドアロンの巨大なバイナリを作る


(ql:quickload :drakma)


(defun print-header (url &optional (strm t))
  (multiple-value-bind 
	(body status header)
	(drakma:http-request url)
	 (declare (ignore body status))
  	 (format strm "- HEADER -~%~{~A~%~}" header)))


(defun main nil 
  (print-header "http://www.yahoo.co.jp/"))


(sb-ext:save-lisp-and-die 
 "/home/moratori/Desktop/print-header"
 :toplevel #'main
 :executable t)

こいつをreplでloadすると指定した場所にでかい実行可能ファイルができるわけ

自分の環境だと67MB...

いろいろと釈然としないんだけど

ただひたすらCommonLisp力と英語力不足だな...

どうしたらいい感じになるのだろう

そもそもquicklispの使い方間違えてんのか別の機能をうまくつかってどうにかなるのか

いまいちわからぬ...
スポンサーサイト
comment 0 trackback 0
トラックバックURL
http://telracsmoratori.blog.fc2.com/tb.php/171-519e578b
トラックバック
コメント
管理者にだけ表示を許可する
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。