GaucheはScheme言語処理系ですが、PerlとCommon Lispの影響をかなり受けています。
Perlの影響は次の特徴にあらわれています。
- 正規表現リテラル
- 文字列補間
- モジュールシステム
- DBI/DBD
正規表現リテラルは他のScheme言語処理系にないユニークな特徴です。正規表現を取り入れたScheme言語処理系もなかったわけではありませんが、Perlに似た正規表現リテラルを採用した処理系は珍しいと言えます。
Perlに似た正規表現リテラルがScheme言語処理系であまり採用されなかった理由は、S式を主体とするLisp系の言語の構文には、正規表現リテラルを使ったPerl風の構文が馴染まなかったからです。Gaucheはあえて正規表現リテラルを取り入れ、実用的なスクリプトが書けるようにScheme処理系を拡張しました。
正規表現については「第2部 文法」で説明します。
文字列の中に式の値を埋め込むことができる文字列補間も、Perlをはじめとするスクリプト言語処理系には定番の機能です。文字列補間はstring-appendやx->stringに展開されるマクロなので他のScheme言語処理系でもユーザーレベルで実現することは可能ですが、Gaucheは実用性を重視し標準でサポートしています。
文字列の補間についても「第2部 文法」で説明します。
Common Lispにはすでに名前空間の衝突を避けるための「パッケージ」と呼ばれる機構がありました。GaucheのモジュールシステムはCommon Lispをはじめとする過去の同様の仕組みを参考にするだけでなく、Perlのモジュールシステムと同様に名前空間をディレクトリ構造にマッピングする仕組みも採用しています。
モジュールについても「第2部 文法」で説明します。
次のScheme言語仕様であるR6RSでモジュールシステムが検討されていますが、仕様策定されるのは当分先になりそうです。Gaucheは実用性を重視し、Perlに影響されたモジュールシステムを最初からサポートしています。
本書では説明しませんが、RDBMSのための統一的ドライバインターフェースであるDBI/DBDも、Perlの同名のインターフェースに由来しています。
ここでみたように、GaucheはScheme言語の正統性よりも実用性を重視し、スクリプト言語であるPerlの特徴をいくつか取り入れています。
GaucheはなぜPerlの影響を受けているのか?
なぜGaucheはPerlの影響を受けているのでしょうか?
Gaucheの作者である川合さんは、かつてCGプロダクションにいた頃、スクリプト言語としてPerlを使っていました。LisperでありSchemerである自分が、なぜ仕事にはPerlを使わなければならないのか?
こう思った川合氏は、スクリプト言語の特徴を多く取り入れたScheme言語処理系を自作しました。
これがGaucheがPerlの影響を多く受けている理由です。
Common Lispの影響
長きにわたって実用に使われてきたLisp言語の一つにCommon Lispがあります。
シンプルなSchemeと対照的に、Common Lispの言語仕様は膨大です。
Gaucheはその膨大なCommon Lispの特徴の中から、いくつかの実用的な要素を取り込んでいます。
- キーワード引数
- オブジェクトシステム(CLOS)
- コンディション
キーワード引数は可変長引数の一種で、ある特定の意味を示すキーワードを引数にとることができます。
キーワードとはシンボルの特別な種類です。:記号の後に名前を書くとその名前はキーワードとして扱われます。
キーワード引数については「第2部 文法」で説明します。
GaucheのオブジェクトシステムはSTklosというScheme処理系の影響を受けています。
STklosのオブジェクトシステムはCommon LispのオブジェクトシステムであるCLOS(Common Lisp Object System)の影響を受けているので、Gaucheのオブジェクトシステムは間接的または直接的にCLOSの影響を受けていると言えます。
オブジェクトシステムについては「第1部 思想」の「すべてオブジェクトである」のほか、「第2部 文法」でも説明します。
Gaucheの例外機構は、実行時に例外を記述するためにコンディションと呼ばれるオブジェクトを使用します。もともとCommon Lispでは、コンディションシステムと呼ばれる例外処理機構がサポートされていました。
構造化例外機構についても「第2部 文法」で説明します。
GaucheはCommon Lispからいくつかの影響を受けていますが、どれも実用的で有用な要素ばかりです。実利を重視するGaucheの実装ポリシーがここからも分かります。
"Right Thing"とGauche
Scheme言語の設計思想の一つに"Right Thing"という考えがあります。
物事を実現するやり方として正しいやり方をとるべきだ、という意味です。
Richard P. GabrielのLisp: Good News, Bad News, How to Win Bigと題した論文( http://www.dreamsongs.com/WIB.html )にThe Rise of "Worse is Better"と題した一節があります。この文章によれば、「正しいやり方」は次の性質を満たす必要があります。
- 簡潔性:
設計は簡潔であるべきで、実装方法の単純さよりも使用方法の単純さの方が重要である
- 正統性:
設計はすべての点で正しい必要があり、誤りは許されない
- 一貫性:
設計は一貫性を欠いてはならず、一貫性を保つために完全性は少し犠牲にしても良い
- 完全性:
設計は起こりうる全ての状況に対応できなければならない。簡潔さのために完全性が犠牲に
なってはならない
Schemeの設計思想は、言語を強化するために機能を追加していくのではなく、後から機能追加が必要になるような弱点を削っていくというものです。
この考えはまさに"Right Thing"(正しいやり方)に根ざしています。
Gaucheとはフランス語で"左"という意味です。つまり"Right"(右)に対する"Left"(左)です。
そんなに厳密に“正しく”やらなくても、実用に使えるならいいじゃん
といったところでしょうか。
名前からも分かるように、Gaucheの設計思想にはこうしたユーモアが隠れています。
|