連載
» 2008年01月29日 00時00分 UPDATE

まつもとゆきひろのハッカーズライフ:第11回 Let's Talk Lisp (1/2)

今回は、Lispについて簡単に紹介してみようと思います。Lispの先進性は、Lispの強さの副作用とでも呼ぶべきものです。Rubyも、文法こそ違うものの、その本質としてLisp文化を継承しているといえるかもしれません。

[Yukihiro “Matz” Matsumoto,ITmedia]

Lispは学ぶ道具?  使う道具?

 エリック・レイモンド(Eric Raymond)のエッセイ「ハッカーになろう*」では、Lispのことが以下のように紹介されています。

LISPは、それをモノにしたときの素晴らしい悟り体験のために勉強しましょう。この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。例え、実際にはLISPそのものをあまり使わなくても。


 それに対してLispハッカーであるポール・グレアム(Paul Graham)は以下のように反応*しています。

彼がLispについて言っていることはよくある意見だ。つまり、Lispを学べばよいプログラマーになれる、でもそれを実際に使うことはない、と。何故だい? プログラミング言語なんてただの道具じゃないか。Lispでよいプログラムが書けるなら、使うべきなんだ。


 そのとおり。あまり使われていませんが、Lispには優れたところがたくさんあります。わたしは、ポール・グレアムほどのLispハッカーではありませんが、Lispプログラマーの端くれ*として、今回はその素晴らしいLispについて簡単に紹介してみようと思います。

Lispの歴史

 Lispの歴史は古く、その誕生は1958年だといわれています。1958年といえば、まだほとんどのプログラミング言語が登場していない時期です。このころすでに存在していたプログラミング言語で生き残っているのは、FORTRAN(1954年)とCOBOL(1959年)くらいのものでしょう。

 Lispがプログラミング言語として特異なのは、もともとプログラミング言語として設計されたものではなく、数学的な計算モデルとして設計されたことに原因があると考えます。Lispの設計者として知られるジョン・マッカーシー(John McCarthy)は、それが計算機言語として使えるとは考えもしませんでした。単なる計算モデルとして記述した万能関数evalを、彼の研究室の大学院生であるスティーブ・ラッセル(Steve Russell)がIBM 704の機械語で実現したことによって、はじめてプログラミング言語Lispが誕生したのです。

Lispのすごさ

 しばらく前になりますが、あるオブジェクト指向関連のイベントで「わたしがオブジェクト指向を理解したのは、Martin Fowlerの『リファクタリング』を読んでからです」という講演を聞いて驚愕しました。オブジェクト指向に最初に触れたのが1980年代で、処理系といえばSmalltalkというわたしのような人間は「もう、じじいの領域だな」と強く感じた一瞬でした。

 実際問題として、Javaではじめてオブジェクト指向を学んだ人はかなりの割合になっているようです。そういう人たちにとっては、オブジェクト指向が真新しい概念のように感じられるかもしれません。また、Javaで強調されている例外処理やガーベッジコレクション、バーチャルマシンなどの概念も、最近登場したもののように感じられることでしょう。

 しかし、それらはみんなJavaより何十年も(文字どおり何十年も)前にLispで実現されていたのです。オブジェクト指向の登場が1968年のSimulaであったことをご存じの方も多いと思います。実に40年近くも前のことです。1980年代にはLisp処理系上にオブジェクト指向システムを構築する研究が多数行われており、それらの研究を踏まえて、1988年にはCommon Lispの標準としてCLOS(Common Lisp Object System)が取り込まれています。

 このCLOSは、多重継承やマルチプルメソッドなど現在でもまだ斬新と考えられる機能がたくさん盛り込まれています。また、最近話題のアスペクト指向に類似の機能*であるメソッドコンビネーションも含まれています。Javaなどがようやく取り込もうとしている技術は、20年前のLispの技術だったわけです。

 アスペクト指向だけではありません。Javaではじめてガーベッジコレクションを知った人も多いでしょうが、Lispはごく初期の処理系からガーベッジコレクションを備えていました。データをオブジェクトとして取り扱い、メモリの割り当てを明示的に行わないLispでは、ガーベッジコレクションは必須だったのです。これまた40年も前の技術ということになります。

 バーチャルマシン、バイトコードインタープリタなどの単語もJavaとともに広く知られるようになりましたが、もともとはSmalltalkで用いられていた技術です。Smalltalkの実装は1970年代後半から1980年代初頭にかけて行われており、その技術もまたLispの影響を受けています。見る人が見れば、Smalltalkの処理系はLispの処理系にそっくりであることが分かります。

 同じ時期に生まれたFORTRANやCOBOLが、いままで蓄積した膨大な資産を管理するために細々と生き残っているのに対して、Lispはいつも時代の最先端に位置しているのは興味深いことです。

このページで出てきた専門用語

ハッカーになろう

原題は「How To Become A Hacker」。日本語訳は山形浩生さんの訳でこちらのURLで読める。

以下のように反応

エッセイ「普通のやつらの上を行け」での反応。このエッセイの川合史朗さんによる日本語訳はこちらのURLで読める。

Lispプログラマーの端くれ

もっともわたしが普段プログラムしているのはCやらRubyやらで、Lispを使うのはもっぱらEmacsのためだし、わたしの書いたプログラムはいつもLispらしくないのだが、今回はそれを棚に上げることにする。

アスペクト指向に類似の機能

それもそのはず、CLOSの設計者にはAspectJの開発者Gregor Kiczaleがいる。「アスペクト指向に類似」というよりアスペクト指向の基になったというべきか。


       1|2 次のページへ

Copyright© 2016 ITmedia, Inc. All Rights Reserved.

Loading

ピックアップコンテンツ

- PR -

注目のテーマ