R6RS 処理系間の差異吸収をどうしようか?

R6RS 処理系、例えば Ypsilon、 IronScheme、 Ikarus、Mosh で共通して動くライブラリを作って公開したいとしよう。その場合問題になるのは処理系間の差異をどう吸収するかということ。R6RSではこのあたりは決められていないので共通仕様を決めて各処理系が実装する必要があると思う。


ライブラリを書くうえで必要そうな機能は以下のようなものがある。

  1. 手続きなどの定義を処理系毎に入れ替えたい
  2. マクロを処理系毎に入れ替えたい
  3. 処理系依存のライブラリを import したい


1と2に関しては SRFI0 の cond-expand を処理系が実装していれば解決できる。
3 はどうしたら良いだろう。1つ考えられるのは load-path を処理系毎にうまく変える仕組みを入れることかな。
例えば cgi ライブラリのコード中で (import (cgi private)) と書いたら private の部分は処理系名に置換されてロードされるとか。
このあたりの議論を探してみて話し合われていないようならば、背景と選択肢をまとめて comp.lang.scheme に突撃してみようかと。CPAN 的なものを作りたいし。


そういえば例の comp.lang.scheme で荒れまくったマクロの議論はここには含めないように誘導するのが良いだろうな。ファイル分ければ良いということで。

追記

id:leque さんより情報を頂きました。

cgi/compat.ikarus.sls, cgi/commpat.ypsilon.sls という風に分けておき
import 側では (import (cgi compat)) という風にしてあって
処理系依存のコードは名前を変更してインストールする、というような雰囲気のがありました