OnLisp その2

http://user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.pdf
昨日の続きをぼちぼち読んでいる。30ページくらいまで来た。ぼちぼち読みながらgauche*1でちまちまコードを書いてみたりしている。なかなか楽しい。
しかしLispというプログラミング言語は解説を読めば読むほど、コードを書けば書くほど柔軟さが感じられる言語だ。正直なところ柔軟すぎる。「好きなように何かを作ってみろ」とやたら柔軟な材料とシンプルな道具のはいった道具箱だけを与えられた気分。
そもそもコンピュータのプログラムは、何かの特殊な問題を解いたり作業を楽にする道具を作るためにに書かれる。その目的はいろいろあって、複雑な計算をすることだったり、文字列を検索することだったり、Webでのショッピングサイトを作ることだったり、お絵書きソフトだったり、チャットソフトだったり、メールソフトだったり、ブラウザだったりする。プログラムを書く時、一番楽できるのは目的に合わせたプログラミング言語を使うことだ。プログラミング言語はメジャーなものやマイナーなものも含めると星の数ほどあって、それぞれ微妙に違う。作るモノの種類によって使う道具が違うように、やりたい目的それぞれに使いやすいプログラミング言語がある(はず)。
でも、Lispはそういったプログラミング言語の中でも特殊なものなのだ、とOnLispの中では書かれている。その特殊さの一番の特徴は、Lispという言語が得意とするのは、プログラミング言語を作ることだ、というところにある。
他のプログラミング言語では、その言語の組み込みの機能とプログラマが書いたコードでできることの間にはかなり大きな差がある。C言語で新しい制御構造を簡単に書くことができるだろうか?簡単にはできはしないだろう。結局、言語自体の実装に手を入れるのと同等のコストがかかると思う。対してLispでは、元々Lispという言語がもっている機能とプログラマが書いたコードでできることの間にほとんど差がない。ユーザーがあるコードを書くと、自然にLispという言語が拡張されてしまうわけだ。Lispという道具箱にはいっている道具は「道具を作る」ことが一番得意なのだ。
この特徴のおかげで、Lispでは目的を解決するためにコードを書いていくと、その目的に適したプログラミング言語を作っているのと同じことになる。なんてすばらしいんだLisp。…でもそれは、そのプログラマーがうまくやりさえすれば、の話。
結局Lispをそんなにうまく使いこなせるプログラマは多くない。Lispである目的を解く一番いいやり方が、Lispの上でその目的に最適なプログラミング言語を作ることであるならば、プログラミング言語をきちんと設計できるプログラマじゃなければLispを使いこなせないことになる。そして残念ながら、多くのプログラマは(それが一番の近道だったとしても)プログラミング言語を作りたいとは思ってない。
きっと本当の熟練Lispプログラマから見れば、他の言語は不自由極まりないものに見えると思う。プログラミング言語の作者によってきっちりひかれたレールの上を走るのは、レールにない近道が見えている人にとってはどうしようもない遠回りに見えることだろう。でも大多数の人達には近道が見えない。その人達にとってはレールがあるのはわかりやすくて安心だ。とりあえずその上を走っていればどこかには辿りつく。
うーん。近道が見えない人にわかりやすく近道を示唆してくれるような仕組みはないものかなあ。

*1:プログラミング言語であるところのLispの方言であるところのschemeの実装のひとつ