次: Hooks for Loading, 前: Named Features, 上: Loading
ライブラリでロードした関数や変数を捨てさって
他のLispオブジェクト向けにメモリを回収することができます。
そうするには関数unload-featureを使います。
このコマンドは、featureを提供するライブラリをアンロードする。 つまり、当該ライブラリにおいて、
defun、defalias、defsubst、defmacro、defconst、defvar、defcustomで定義した関数、マクロ、変数すべてを未定義にする。 そうして、これらのシンボルに以前設定してあった自動ロードの設定を復元する。 (ロード時に、これらをシンボルの属性autoloadに保存している。)以前の定義に復元するまえに、
unload-featureはremove-hookを 実行して、ライブラリ内の関数を特定のフックから取り除く。 これらのフックは、`-hook'や`-hooks'で終る名前の変数、および、loadhist-special-hooksに入っているものである。 これは、重要なフックにおいて存在しない関数を参照することで Emacsが動作不能になるのを防ぐ。これらの処置でも誤動作防止には不十分であるときには、 ライブラリで明示的なアンロードフックを定義できる。 feature
-unload-hookを定義してあると、 以前の定義を復元するまえに、 フックを削除する通常の動作のかわりに このフックをノーマルフックとして実行する。 アンロードフックでは、 ライブラリをいったんアンロードすると動作不能になるような ライブラリで変更したグローバルな状態をすべてアンドゥすべきである。通常、
unload-featureは、他のライブラリが依存している ライブラリのアンロードは拒否する。 (ライブラリaでbをrequire(要求)していると、 ライブラリaはライブラリbに依存している。) 省略可能な引数forceがnil以外であると、 依存関係を無視し、任意のライブラリをアンロードできる。
関数unload-featureはLispで書いてあり、
その動作はload-historyに基づきます。
この変数の値は、ライブラリ名をそのライブラリが定義する関数や変数の名前、 そのライブラリが提供する機能、そのライブラリが要求する機能に対応付ける 連想リストである。
各要素はリストであり、1つ1つが1つのライブラリを記述する。 リストのcarは文字列であり、ライブラリ名である。 リストの残りは、以下の種類のオブジェクトから成る。
- このライブラリで定義されたシンボル。
(require .feature)の形のリストであり、 要求する機能を示す。(provide .feature)の形のリストであり、 提供する機能を示す。
load-historyの値には、carがnilであるような 1つの要素があってもよい。 この要素は、ファイルを訪問してないバッファ内でeval-bufferによって 作られた定義であることを示す。
コマンドeval-regionはload-historyを更新しますが、
訪問先ファイルに対応する要素に、定義されるシンボルを追加するのであって、
要素を置き換えるのではありません。
あらかじめロード済みのライブラリは、load-historyに寄与しません。