Next: , Previous: , Up: ロード   [Contents][Index]


16.9 アンロード

他のLispオブジェクト用にメモリーを回収するために、ライブラリーによりロードされた関数や変数を破棄することができます。これを行うには関数unload-featureを使用します:

Command: unload-feature feature &optional force

このコマンドはフィーチャfeatureをプロバイドしていたライブラリーをアンロードする。そのライブラリー内のdefundefaliasdefsubstdefmacrodefconstdefvardefcustomによって定義されたすべての関数、マクロ、変数は未定義になる。その後に、それらのシンボルにたいして事前に関連付けられていたオートロードをリストアする(ロードはシンボルのautoloadプロパティにこれらを保存している)。

以前の定義をリストアする前に、特定のフックからライブラリーが定義した関数を取り除くために、unload-featureremove-hookを実行する。これらのフックには名前が‘-hook’(または廃止されたサフィックス‘-hooks’)で終わる変数、加えてunload-feature-special-hooks、同様にauto-mode-alistにリストされた変数も含まれる。これは重要なフックがすでに定義されていない関数を参照をすることにより、Emacsの機能が停止することを防ぐためである。

標準的なアンロードアクティビティでは、そのライブラリー内の関数のELPプロファイリング、そのライブラリーによりプロバイドされたフィーチャ、そのライブラリーで定義された変数に保持されたタイマーをアンドゥする。

これらの基準が機能不全を防ぐのに十分でなければ、ライブラリーはfeature-unload-functionという名前の明示的なアンローダーを定義できる。そのシンボルが関数として定義されていたら、unload-featureは何かを行う前にまず引数なしでそれを呼び出す。これはライブラリーのアンロードのために適切なすべてのことを行うことができる。これがnilをリターンしたら、unload-featureは通常のアンロードアクションを処理する。それ以外ならアンロード処理は完了したとみなす。

unload-featureは通常は他のライブラリーが依存するライブラリーのアンロードを拒絶する(ライブラリーbにたいするrequireがライブラリーaに含まれるなら、abに依存している)。オプション引数forceが非nilなら依存関係は無視されて、どのようなライブラリーもアンロードできる。

unload-feature関数はLispで記述されており、その動作は変数load-historyにもとづきます。

Variable: unload-feature-special-hooks

この変数はライブラリー内で定義された関数を取り除くために、ライブラリーをアンロードする前にスキャンするフックのリストを保持する。