R6RS の import only の良い点

R6RS の import には only 修飾子があってインポートする手続を限定できる。
例えば

  (import (rnrs)
          (only (stack) make push! pop!)

のように stack ライブラリの make/push!/pop だけをインポートするとか。


このような機能があっても使うかな?。全部インポートしてしまえば良くない?名前空間汚染とかそこまで気にしないよ。
と思っていたのだけれども、できるだけ多くの人が(多くのR6RS処理系で)使えるライブラリを定義しようとすると便利なことに気づいた。


例えば今書いている CGI ライブラリでは

 (library (cgi)
  (export init encode decode)
  (import (rnrs)
          (only (system) get-environment-variable)
          (only (mosh regexp) regexp-replace-all)
          (only (mosh collection) bytevector-for-each)
          (only (mosh) string-split format call-with-string-io digit->integer)
          (only (srfi-1) second)

のように only で import しまくっている。
この方法の良いところはライブラリを使う側が、ライブラリが依存する非標準手続きを簡単に知ることができる点。
この場合だと (import (system) ...) だけだと system ライブラリが何を提供しているかさっぱり分かりませんが、(only (system) get-environment-variable)と書いてあれば一目瞭然。


そろそろ R6RS ライブラリを共有できる仕組みが欲しいところ。
あといずれは psyntax 用に定義したライブラリをプリコンパイルしたい。