Gauche > Archives > 2016/11/01

2016/11/01 05:00:06 UTCshiro
#
なるほど。with-moduleの効力は(今のバージョンでは)それを囲むコンパイル時のみで、コンパイルされたコードが実行されるときは効果がない。hygienic macroの展開はコンパイル時に行われるから、「マクロ展開時の現在のモジュール」はwith-moduleが効力を持つコンパイル時モジュールを参照しているはず、という想定であった。
#
er-macro-transformerはそれ自身がマクロであり、それ自身がコンパイルされる時に定義時環境を捕まえるが、展開結果に含まれる「定義時環境を捕まえるコード」がコンパイル時モジュールではなく実行時モジュールを見に行ってしまっている、ように見える。
2016/11/01 07:48:58 UTCshiro
#
だんだん思い出してきた。そもそもなぜ素直に定義時環境をそのまま保存してないかというと、プリコンパイルする場合には、定義じ環境の実体(ランタイムに作られるScmModuleやらフレーム構造やら)をそのままマクロ使用時に持ち越せないからだった。そんで、わざわざマクロ使用時の実行時環境からコンパイル時環境を復元するコードを挿入していたのだ。