ライブラリの仕組みをどうするか?

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) とコンパイルする。

VMで実行

うーん。ちと違うかな。寝かそう。