検索
連載

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

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

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

Lispの強さ

 最先端の機能を提供してきたLispですが、その強さは特定の機能に見いだせるわけではありません。むしろ、いろいろな機能を実験してみるのに非常に便利なため、その中でよいものが生き残ったと考えるべきでしょう。Lispの先進性は、Lispの強さの副作用とでも呼ぶべきものなのです。

 その強さを表現するキーワードは「動的」です。インタープリタそのものであるevalを持っているLispは非常に動的で、単なるデータだけでなくプログラム自体を取り扱うことができます。Javaなどにもリフレクションという名前でプログラム自体を扱う機能が提供されていますが、データとプログラムが同一のフォーマットで表現されるLispの動的性にはかないません。プログラム自体を扱うプログラミング、メタプログラミングによって、Lispの上にいわば別の新しい言語を作り出すことが簡単にできます。新しく言語処理系を書かなくてもドメイン特化言語*を作り出すこともできますし、言語自体に手を加えなくてもオブジェクト指向機能のようなものも実現できます。

Lispの不幸

 そんなに優れた言語なのに広まらなかったLispは、不幸としか言いようがありません。もちろん、ただ単に運が悪かっただけではなく、いろいろと理由はあります。

 その1つはさまざまな誤解です。Lispはほかのプログラミング言語に比べて「高級」なので、実装が大変難しく、なかなか性能の良い処理系が登場しませんでした。性能第一のFORTRANなどの言語と比較すると、その点で長らく不利でした。その後、実装技術の向上によってほかの言語とそん色ない性能が出せるようになっても誤解は解けず、いつまでも「Lispは遅い、使えない」と思われてきたのです。また、学者しか使わない言語というイメージが形成されたのもつらいところです。

 もう1つの理由はあの括弧でしょう。Lispのプログラムには大量の括弧が登場します。慣れれば優先度などが明確に表現されるよい文法なのですが、少なくとも初心者は引いてしまいそうです。また、プログラミングスタイルが「普通」の言語とは相当異なることも問題です。この点では関数型言語も似たような障壁に当たっているようです。

MatzLisp

 JavaはLispで培われてきた技術を広く知らしめるのに貢献しました。いままで知る人ぞ知る技術であったものが、Javaのおかげで多くの人が知る「常識」に格上げされたといってもよいでしょう。しかしJavaには、Lispの強さのごく一部しか取り込まれていません。「時代は動的言語」といわれていますが、それはJavaが提供しなかったLispの強さを取り込んでいく、世間がますますLispの強さに気がついていく過程なのかもしれません。わたしのデザインしたRubyがその一翼を担っているのは誇らしい限りです。

 以前、某イベントの二次会で「実はRubyって『MatzLisp*』というLispの方言だったんだよ!」と語られたようです。何とも傑作なネタですが、Lispの強さを痛感したわたしが「自分が満足するために」作り出したRubyは、文法こそ違うものの、その本質としてLisp文化を継承しているのかもしれません。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

ドメイン特化言語

目的別に特別設計された言語(DSL:Domain Specific Language)。

MatzLisp

MITで開発された有名なLispにMacLispというものがあり、それとかけているという点でもこのネタは秀逸である。


本記事は、オープンソースマガジン2006年2月号「まつもとゆきひろのハッカーズライフ」を再構成したものです。


前のページへ |       

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る