Kawa2.0のR7RS(未遂)

Java上のScheme実装であるところのKawaがR7RSをサポートしたそうなのでyuniのサポートもtryしてみた。Kawaには従来からR6RS readerとsyntax-caseが有るので、ライブラリ機能としては十分なものがあると言える。
が、微妙な罠にハマってしまい上手くいかなかった。
Kawaは他のR6RSと同様の、ライブラリ名コンポーネントディレクトリに対応させてサブディレクトリを探索する挙動となっている。このため、起動用のスクリプトとしては:

exec java -Dkawa.import.path="lib-stub/kawa/*.sld" -classpath ./kawa-2.0.jar kawa.repl --r7rs --script lib-runtime/kawa/yuniloader.scm -- $*

のように、javaコマンドに-Dオプションでkawa.import.path変数を渡し、末尾に*.sldを付ければ良い。ただ、この辺のライブラリパスの解釈が他のSchemeと一味も二味も違うので難しい。

  • Win32上でライブラリパスに絶対パスを指定する良い方法が無い(c:/はURLと解釈されてしまうためドライブ名を含めることができず、/から始まるパスは不正なパスとしてエラーになる)
  • 特にドキュメントされていないように見えるが、Win32では複数パス指定時の区切りは : ではなく ; (セミコロン)となる
  • ライブラリからライブラリを読む場合、検索パスは当該ライブラリファイルからの相対に設定される。これはKawa以外にこういう挙動になるものを知らない。。

特にパス区切りに : を使えないのはかなり悩んだが、結局procmon( http://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx )を使って調べた。Linux等ではstraceを使ってsyscallトレースを取ることで解るが、Windows上ではprocmonを使うのが良い。

Kawaが開こうとしているパスの末尾に : が付いているのがわかる。
まだ正常にパスを渡せていないので動作にこぎつけていない。

結局のところ、Kawaも自前のフロントエンドを用意しないとWindows上では使えないように見える。