gencomp 確認 (2)

これはトレーニングとしては凄く良いのですが、へろへろ気味なので微妙。
とりあえず頑張ってみます。プログラミング Gauche が参考書。

ええと

次は do-it 手続きなんですが、先頭部分を先に吟味。コメントは略で以下に引用。

(define compile-module (make-parameter #f))

(define compile-module-name (make-parameter #f))

(define compile-file-basename (make-parameter #f))

(define compile-module-exports (make-parameter '()))

(define ext-module-file (make-parameter #f))

(define private-macros-to-keep (make-parameter '()))

(define compile       (with-module gauche.internal compile))
(define compile-toplevel-lambda
  (with-module gauche.internal compile-toplevel-lambda))
(define %procedure-inliner
  (with-module gauche.internal %procedure-inliner))
(define vm-code->list (with-module gauche.internal vm-code->list))
(define vm-eval-situation
  (with-module gauche.internal vm-eval-situation))

(define-constant SCM_VM_COMPILING 2) ;; must match with vm.h

ええと、前半部分は make-parameter 手続きの戻りを define してるカンジ。make-parameter は プログラミング Gauche によれば例えば以下は

(define compile-module (make-parameter #f))

初期値が #f のパラメータなオブジェクトを生成して compile-module って名前、という事になるのか。テキストには以下なカンジのソレがナニ。

gosh> (use gauche.parameter)
#<undef>
gosh> (define compile-module (make-parameter #f))
compile-module
gosh> (compile-module)
#f
gosh> (compile-module #t)
#f
gosh> (compile-module)
#t
gosh> 

後半部分で微妙なのが with-module というナニ。Gauche ユーザリファレンス 4.11 モジュールによれば

名前 name を持つモジュールをカレントモジュールとした状態で body … を順に評価し、最後の結果を返します。

とある。上記で言えばシンボルをモジュールで定義されたナニで解決してる、という事になるのでしょうか。
あと最後の define-constant って何でしょ。これもリファレンスにありますな。Gauche ユーザリファレンス 4.10 定義にて記述されてます。再定義は可能だけど set! はできないとの事。

do-it を、と最初思ってたんですが、とりあえず gauche.cgen 確認した方が良さげなのでしょうか。とは言えボリューム大き杉なんですが ...
でびあんな 0.8.7 だと /usr/share/gauche/0.8.7/lib/gauche/cgen.scm がソレに当たる模様。ソースをオトしているのであれば (0.8.11 を例にとると) Gauche-0.8.11/lib/gauche/cgen.scm になる模様。

0.8.11 を見た方が良いのかな、と言いつつ cgen.scm 見てみたらコメントが殆どに変貌している模様。コメントを取り除くと以下?

(define-module gauche.cgen
  (extend gauche.cgen.unit gauche.cgen.literal)
  )
(select-module gauche.cgen)

(provide "gauche/cgen")

わははは。件の本の 20 章はモジュールシステムという題が付いてるんですが、きちんと読んだ方が良さげ。
基本的には

というモジュールを継承して gauche.cgen としてまとめてる、んでしょうか。あるいは provide は C の ifdef 云々と同様の動作?

今日は

とゆーか_今日も_微妙なんで早めに休んで週末に賭けます (何