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 云々と同様の動作?
今日は
とゆーか_今日も_微妙なんで早めに休んで週末に賭けます (何