RtS:Rui

RtS:Rui

Scheme:RoadToScheme, Rui

最初にSchemeを使ったのはいつ頃でしたか、またその処理系は?

Lisp系言語にはじめて触れたのはおそらく1996年ごろで、処理系はEmacs Lisp (elisp)。Elispで本格的にプログラムを書いたのは2000年前後。その後WanderlustのスプラッシュスクリーンをNavi2ch (Emacs上で動く2chリーダ)に移植したりして遊んでいた。ほかにcontribに入っているコードを書いたりとか。

今から考えるとelispはよい言語ではなくて、当時はLispの何がそれほどすばらしいのかと思った。

初めて触れたSchemeはGauche。2003年。

どうしてSchemeを使ってみようと思ったのでしょう

Navi2chにベイジアンフィルタを組み合わせてみようと思って、shiroさん翻訳したページに来た。そこからGaucheのページを読んで、日本語がきちんと扱える点を気に入って使ってみようと思った。Schemeだから使うとかではなく、処理系がよくできているので選んだということ。とはいえ、Lispはなんとなくかっこいいよねと思っていて、それが背中を後押ししたことは否定しないけど。

使ってみると、Gaucheは機能のバランスが取れていて、時には実装上の大胆な選択をしつつもそれが適切で、マニュアルもきちんとしているのですばらしいと思った。この思いはいまでも変わらない。

それまで良く使っていた他の言語は?

Perl。職業的にプログラミングはしていなかったので、それほど使っていたというわけでもない。Cはほとんど書かなかった。

どのくらいSchemeを使い込んでいますか?

ちょっとしたプログラムを書くとなると、まずGaucheを使うことを考える。実際にGaucheで書くのは3割くらいかな。仕事でプログラムを書くときには、基本はPHP (げげー)やPerlなので。

商業的なプログラムをGaucheで書いた経験がある。規模は、本体数100行、自作のライブラリ6000行程度。Webアプリではないんだけど、ネットワークアプリケーションで、継続ベースで書かれている。まさにPaul GrahamがViaweb (Yahoo! Storeの前身)でやっていたみたいに、制御が離れるときに続きの仕事をするクロージャをハッシュテーブルやタイマ用のリストに登録して、その後のイベントがハッシュからクロージャを得て、続きの処理を呼ぶといったことをしている。これは強力な手法で、プログラムが書きやすくて助かっている。

Schemeについて感じてることをざっくばらんにどうぞ

動的な型付けとレキシカルスコープがSchemeの一番の強みだと思うけど、現代的なスクリプト言語はどちらの機能も備えている。だからSchemeを使うかRubyやPerlを使うかというのは、言語そのものの機能を選ぶというよりは、どういうスタイルでコードを書くのか選ぶという話だと思う。もしSchemeのスタイルが好きならそれを選べばいいし、そうでないなら別の言語を選ぶのがいい。Schemeのスタイルは、未経験者が思っているほど他の言語と違うわけではなくて、丸括弧だらけのエキゾチックな見かけほどには非常識的な言語ではないと感じている。少なくとも悟り体験みたいなものは僕にはない。

マクロはSchemeのすごい機能の1つで、他の言語にはなかなかマネできないものだが、さほど使うものでもない(これは僕がたんにそうなだけかもしれないけど)。ほかのスクリプト言語と比べてみると、ほかの言語ではそれなりにニーズのある構文がネイティブにサポートされているので、その範囲内だけで書いているならマクロを使いたくなることはない。

ほかの言語がキャッチアップしてしまったので、Lispならではという面は減っているのかもしれない。

ではなぜ僕がSchemeを使っているかというと、コンパクトな言語仕様が気に入ってることと、Gaucheの出来がよいこと、Schemeに慣れていること、この3つかな。PythonやRubyを選ぶなら、Gaucheもかなり使えるよ、といいたい。学習書のパズル的な問題を解くときだけじゃなくて、普通のプログラミングにGaucheはもっと使えるはずだし、そのことを実証していきたいと思っている。

(そういえばMOPのことを忘れていたが、MOPはかなりヘンな機能で、しかも役立つものでもある。ヘンな機能を実装したいときにマクロやMOPが役に立つ。こういう言語そのものの機能をその言語自身でさわれるところが強みなのかもしれない。)

More ...