R6RSのライブラリの仕組みをどう実装するべきか。もやもやしている。
- コンパイル時にすべて解決してしまうか?できるのか?
- それとも Gauche の module のように gref の中で module->imported の中を lookup するか?
- vm にカレントライブラリレジスタ見たいなのを置くんだろうか?
うーん。うーん。
難しいことは単純に考えよう。以下のようなトップレベルプログラムがあるとする。
(import (rnrs io simple))
(display "Hello, World!")
こいつを実行することを考えよう。
- コンパイル時に import を発見したら (rnrs io simple) のライブラリファイルを読み込む。
- (rnrs io simple) を読み込むと (rnrs io simple) が エクスポートしている束縛の一覧がとれる。
- (import ...) は (IMPORT (rnrs io simple))命令にコンパイル。
- 束縛の一覧に display があったので display の参照へのコンパイルを (LIB_REFER (rnrs io simple) 'display) とコンパイルする。
- (IMPORT ...) はライブラリをコンパイルして eval。
うーん。ちと違うかな。寝かそう。