ステップ実行eval開発中(1)
とりあえず手続き類は問題無く動くようになった。
しかし、マクロとspecial formの評価時に割り込み処理を入れるのが難しい。
マクロとspecial formには割り込み処理を入れない事にすると、当初に想定していた利用方法の大半が駄目になってしまう為、この部分は実装しておきたい。
- 具体的には、マクロ展開やspecial formが(手続きの実行を含まずに)無限ループする場合があると問題になるので、割り込み処理を入れて、特定ステップ以上かかったらevalを中断できるようにしたい、という事。
実装方法は色々と考えた。
- 真面目に、evalにかける前に自前でマクロとspecial formを展開/実行する。
- マクロの方はmacroexpand-1があるのでそれなりに簡単そうだが、special formも同時に考慮する事を考えると頭が痛くなる。quasiquoteのunquoteとか。
- 無限ループする可能性のある特定special formは、ステップ実行eval用モジュール(環境)に束縛する段階で、こっそり割り込み処理を実行するマクロとして束縛する。マクロはmacroexpand-1を使って自前で展開する。
「最終的には、真面目にspecial formを実装する」という約束で、とりあえずspecial formは隠し束縛で実装する事にする。
マクロは自前で展開する。