「Gaucheでメタプログラミング」と題して、これからGaucheを使ったプログラミングの連載を書かせていただきます吉田裕美です。よろしくお願いいたします。

Gaucheとは

今回の連載で取り上げるGaucheはハワイ在住の日本人ハッカー、川合史朗さんが作った、Lispの一種であるSchemeのオープンソース処理系です。

Gaucheの特徴は、PerlやRubyのように気軽に使える軽い処理系だということです。Perl同様に正規表現や文字列操作が行え、ちょっとしたツールの作成にも使えます。しかし、非常に強力なCommon Lisp風オブジェクトシステムを持ち、Lispならではのマクロに加え、Webやグラフィックスなどの豊富なライブラリも持っているので実用的なシステムの構築にも使えます。

2008年3月にオライリー・ジャパンから出版された「プログラミングGauche」も好評で版を重ねており、これから本格的にGaucheを学びたいという方は参考書としてお勧めです。

関連リンク： Gauche - A Scheme Interpreter

http://practical-scheme.net/gauche/index-j.html



ちょっと変わったLisp入門

ほとんどの皆さまは、どこかでLispのコードを目にしたことがあると思います。しかし、COBOLやC、Javaなどのメインストリームの言語を使われてきた方にとっては、とても不思議に見える言語かもしれません。

if文やwhile文といった文法もないし、計算式や代入文もありません。カッコと単語とカッコとカッコとカッコ……という見た目から、人間の使う言語ではないという印象を持っている方もいるようです。また、Lispの書籍には難しい用語や数学的な説明が多く、頭の良い人のみが使える言語だと思われている方もいるかもしれません。

私がLispを知ったのは、大学の卒業研究でLispの処理系を作ることになったのが始まりです。研究は先生の書かれた論文を基にした実装で、処理系は主にアセンブラで書きました。いざ処理系が動き出しLispコードを動かす段になり、本に書かれた例題以外のコードがなかなか書けなかったのを、いまでも鮮明に覚えています（笑）。

連載第1回では、ちょっと変わった視点からLispに入門してみましょう。

LispはPerlやRubyのご先祖さま

図1は、プログラミング言語の歴史の一部を書いたものです。多少私の思い込みも含まれているかもしれませんが、お許しください。

図1 プログラミング言語の歴史

図の中で、実線の矢印は直系にある言語、破線の矢印は影響を表しています。また、上下に分かれていますが上の方はコンパイルを行い、コンパイル時点でいろいろなものが決まる静的な言語。下はインタプリタがメインで、いろいろなものが動的に決まる言語です（Haskellは静的型付けを持つ言語ですがイメージ的に下に入れました）。

かなりの方が仕事では上にあるC、C++、Java、C#やCOBOLなどを使われているかもしれません。また、最近はPerl、Python、PHP、Rubyなどを使われている方も多いと思います。さらに、Webにかかわる方はJavaScriptは外せない言語になってきていると思います。

この図から分かるように、LispはFORTRANに次ぐ古い言語です。そしてSmalltalkやPerl、Python、Rubyなどの言語に大きな影響を与えています。また、変数などのメモリを動的に管理し、不要になったメモリを自動的に回収するガベージコレクション（GC）はいまやメインストリームのJavaやC#にも採用されています。また、ML、OCaml、Haskellのような関数言語の先駆けともなりました。

Lispは人工知能（AI）ブームのメイン言語になり独自の発展を続けました。しかし、その過程でたくさんの方言が生み出されてしまいました。そこで、Lisp言語の標準としてCommon Lispが制定されました。

現在では一般にLispといえば、このCommon Lispを指します。しかし、Common Lispは制定時のメジャーなLisp方言のスーパーセットとして作られたため、非常に大きな仕様の言語になってしまいました。

Lispの発展の中で、純粋にLispに必要なものは何かを追求し、シンプルで強力な概念を核に持つSchemeという方言が生まれました。Schemeはコンピュターサイエンスを教えるのにも最適であったため、大学のコンピュターサイエンス学科で盛んに使われました。

Schemeはそのシンプルさ強力さからハッカーに気に入られ、現実のプログラミングの世界でも独自拡張を行った処理系がいくつも作られ、使われています。Gaucheもそんな処理系の1つです。

1|2|3|4|5 次のページへ