LISPUSER

LISPMEMOQ: How can you tell when you've reached Lisp Enlightenment?
A: The parentheses disappear. -- Anonymous

(top)  (memo)  (rss)

Common Lisp はコマンド作れない?いや作れます!

会社の同僚から Matz 日記 (http://www.rubyist.net/~matz/20070827.html ) のエントリを紹介された。

(Common) Lispの最大の問題は「コマンドが作れないこと」という分析。ライブラリは簡単に作れるんだけど。

ここでコマンドとはコマンドラインから実行できるもの、あるいはexecシステムコールで呼び出せるもの(Windowsならstartか)。

いや、もちろん作れるんだけど、イメージをまるごと含む形になるため、ほんの小さなプログラムでも巨大になりがち。 これでは「伝統的な開発モデル」にはうまくはまらない、ということ。

Smalltalkでも似たような状態なんだけど、とはいえ、これはLisp(や Smalltalk)の最大の利点でもあるわけだし。利点と欠点が表裏一体ということか。

まず、CLISP ならフットプリント 4MB 程度で #!/usr/bin/clisp なスクリプトがかけます。 スクリプトによるコマンドでいいなら別に特別巨大というわけでもないと思います。(手元の Ruby のバイナリが 3MB でした)

スタンドアロンバイナリ化にしても、 CLISP ならイメーズファイル + スクリプトのバイトコードサイズになりますので、Ruby や Python の py2exe, Perl の PAR などのツールと比較しても特別巨大というわけではないと思います。

まぁ、SBCL とかの話なんでしょうけど、この手の話題で一番巨大なバイナリを生成する処理系を対象にするのはどうかと。 C の場合は libc (ランタイム) と gcc (コンパイラ) が分離してるけど Lisp だと一体化してるのが普通ですからね。

コンパイラに gcc を使う ECL なら小さなスタンドアロンバイナリも出せます (libecl.so は 3MB 程度あるけど)。

ネイティブコードコンパイラを備えた処理系でも、たとえば LispWorks なんかはコンパイラの機能を外したりして スタンドアロンバイナリのサイズを抑える(でも 8MB とかあるけど)機能があったりしますし。

スクリプト的な用途だと Emacs Lisp や Gauche もオススメです。

posted: 2007/09/05 22:23 | permanent link to this entry | Tags: MISC

(top)  (memo)  (rss)