質問: マクロやインライン関数の場合、再定義してもそれらを利用する関数は、再コンパイルしない限り元の定義が使われるままになってしまいます。 ``` (declaim (inline foo)) (defun foo (x) (cons x :foo)) (defun bar (x) (foo x)) (defun baz (x) (foo x)) (bar 8) ;=> (8 . :FOO) (baz 8) ;=> (8 . :FOO) ;;; 再定義 (defun foo (x) (list x :bar)) ;; 古いまま (bar 8) ;=> (8 . :FOO) ;; 古いまま (baz 8) ;=> (8 . :FOO) ``` 新しい定義を利用するようにさせたいのですが、ファイル全体をコンパイルし直すことなく目的の関数だけコンパイルし直すことは可能ですか?
回答: 処理系によっては、目的の関数を利用している (マクロの場合、展開先) 関数一覧を得ることが可能です (who-calls) これらの情報を利用して目的の関数だけ再コンパイルする機能をサポートする開発環境があります。 SLIMEの場合 インライン関数の場合は、 slime-who-calls (C-c C-w c) マクロの場合は、slime-who-macroexpands (C-c C-w m) を使用すると一覧が表示されますので、 このバッファの目的の関数名の上で、C-c C-cします。全体の一括処理は、slime-recompile-all-xrefs(C-c C-k)で可能です。