そろそろLISPブームが再来する




計算機プログラムの構造と解釈

On Lisp


思うに、LISPには名著が多い。100年に一度の名著であるSICP*1は言うに及ばず、 ハッカーと画家 コンピュータ時代の創造者たちで有名なPaul Graham氏のOn Lisp


あと、日本のLispハッカーとして名高い竹内郁雄先生の初めての人のためのLISP (ソフトウェアライブラリ (3))。この本は、何年も前に絶版になっているが、目次からして、なにやらおかしい。

[目次]
1 初めての人のためのLisp
2 CARとCDRで世間を渡れば権兵衛もたじろぐ
3 解釈は評価なり・・・辞書なくして世は渡れず
4 基本関数を修了するや,突然関数定義 なんと大それた・・・
5 今度はcond,再帰と再起を混同せぬように
6 またも再帰するから再帰なのだ
7 Go,go,go・・・,do,do,do・・・,loop,loop,loop・・・, やっぱりOは丸い
8 Lispの御本尊のお出まし
9 デートの前にリストの切り貼り
10 変態プログラム
11 シンボルを人前に曝す
12 ガールフレンドも買い物も関数引数でOK
13 Lispの解剖 その1
14 入出力がなければプログラムは生きていけぬ
15 Lispの解剖 とんでその2
16 大団円 対話性に関する対話
17 付録 Lispのまとめ

中学生がふざけて書いているのかと思わせるような目次だが、内容はすこぶる明快で、記号言語処理の本質的な部分を優れた知見で捉えている良書だと思う。この本は、近々復刊するようだ。*2


Paul Graham氏が、LISPASPサイトを書き、それがYahooに買収されてYahoo!Storeになったというのは有名な話だが(ちなみに、Yahoo!の45万5000株(4960万ドル相当)と交換でYahoo!に買収された/1998年)、そこから10数年経た現在こそ、LISPでWebサイトのプログラムを書くのにふさわしいのではないかと思う。


普通、Webサイトを作るとき、DBへのアクセスはSQLなり何なりを使うし、画面の整形には何らかのテンプレートフレームワーク(smartyなど)を用いるので、LISPが他の言語の10倍遅かろうとページが表示されるまでのレスポンスや、サーバー負荷はほとんど変わらないと思う。

それにJavaScriptのような動的な言語があれだけの速度で実行できるのだから、LISPも近代的なJITでは他の言語(Perlphpなど)と遜色がないぐらいの速度で動くと思う。


どうせWebサイトのプログラムはそんなに長いプログラムにはならないので、ソースの可読性が多少悪くとも全く問題がない。(かも知れない)


あと、会員のログイン管理をしないといけないようなWebサイトは、ユーザーからのログイン状態や画面遷移に関して直前の操作を記録しておかないといけないことが多々あるが、そういったパラメータの引き渡しにしても、LISPならLISPの実行環境まるごとを取得して、それをDBに文字列として保存しておけば、次にそのユーザーからアクセスがあったときにその実行環境をDBから復元すれば楽に書けるのかも知れない。なんだかミラクルだ。


まあ、ASP.NETでも一時的に記録しておかなければならないパラメータひとつひとつをDBにテーブルを作って格納するのは面倒だから、XmlSerializerか何かでシリアライズして会員レコードにでも突っ込んでおくようなことをする(?)だろうけども、それよりさらに柔軟性がある。


Visual Studio 2010でF#が標準搭載されるらしいけども、LISPやF#のように関数をfirst-class objectとして扱えるというのは、今後、重要になってくるんじゃないかと思ったり…。

*1:→「計算機プログラムの構造と解釈」のこと。日本語版の翻訳の質はいまひとつ。ちなみに原著はオンラインで読めるので英語が苦手でなければ是非原著のほうを。

*2:情報ソース → http://www.bk1.jp/product/03125439 発売予定日が2009.6になっているが、もう7月なんですけど…。→と思っていたら「発行年月 : 2009.12」と発売が延期された模様…。