SBCLでスタンドアロンプログラム
需要あるかどうかはおいといて
standalone executablesをSBCLで作るには、sb-ext:save-lisp-and-dieを使います。
Hello Worldするとこんな感じ
(defun main () (format t "Hello, World!")) (sb-ext:save-lisp-and-die "cl-bin" :executable t :toplevel 'main)
これを保存(sample.lisp)して、
とすれば、cl-binという実行可能ファイルが得られます。
これを実行すれば
$ ./cl-bin
Hello, World!
簡単ですね。
だがしかし
/home/toshi/sample: 合計 28328 drwxrwxr-x. 2 toshi toshi 4096 2010-05-07 19:46 . drwx------. 97 toshi toshi 4096 2010-05-07 19:42 .. -rwxrwxr-x. 1 toshi toshi 4887 2010-05-07 19:43 a.out -rwxr-xr-x. 1 toshi toshi 28971036 2010-05-07 19:46 cl-bin -rw-rw-r--. 1 toshi toshi 75 2010-05-07 19:43 hello.c -rw-rw-r--. 1 toshi toshi 110 2010-05-07 19:46 sample.lisp
ファイルサイズでけえwww
28Mてw
CのHello, Worldプログラム(a.out)は4.8Kなのに。
Lispのプログラムとは、定義やデータをロードした、ある状態を指します。
つまりLispの実行可能ファイルとは、その状態のイメージをまるっとダンプしたものである、というわけ。
だからこんなにでかい。。。でかすぎだろ。。。