最近 PLT-Scheme を使うようになったが、PLT-Scheme で書いたプログラムを他の Scheme で動かすのって意外と難しい事が分かった。なんだこのバラバラさは。色々な Scheme で動くプログラムを書くにはどうすればいいのだろうか。調べて行くと、slib http://people.csail.mit.edu/jaffer/SLIB.html というライブラリに辿り着いた。slib というのは、Scheme 用に便利関数を集めたライブラリで、沢山の Scheme に対応している。これの真似をすれば色んな Scheme で動くプログラムが作れるんじゃないだろうか。
気づかないうちに自分のマシンに slib が入っていた。どうも gauche を port で入れた時に入ったようだ。man slib を読むと、slib という名前のコマンドが提供されていて、引き数に実装の名前を入れると slib 付きの scheme が起動する。例えば slib guile とすると slib 付きの guile が起動する。実はこれだけではまだ使えなくて、guile の中でさらに (use-modules (ice-9 slib)) が必要だ。
$ slib guile guile> (use-modules (ice-9 slib)) guile> (slib:report-version) SLIB "3b1" on guile "1.8.4" on unix
gauche の場合、slib gauche というのは用意されていないが、gauche 側でサポートされているので gosh の中で (use slib) とやると使える。
$ gosh gosh> (use slib) #<undef> gosh> (slib:report-version) SLIB "3b1" on gauche "0.8.13" on unix #<undef>
ではどうやって互換性を実現しているのか見てみる。slib コマンドの場合、中で guile.info という初期化ファイルを読み込んでいる。このディレクトリ (MacPort では /opt/local/lib/slib) になんとか.info が沢山あり、処理系ごとの互換性レイヤになっている。gosh の場合は .info の代わりに gauche ライブラリの slib.scm というファイルが slib の初期化に使われる。そして初期化ファイルの中で require がロードされて slib が利用可能になる。
さて、肝心な PLT-Scheme だが、slib は PLT-Scheme に対応していないとホームページに書いてあった。ガックリ。まあ結論としては
という当たり前の話になった。