Next: Hooks for Loading, Previous: Where Defined, Up: Loading [Contents][Index]
他のLispオブジェクト用にメモリーを回収するために、ライブラリーによりロードされた関数や変数を破棄することができます。これを行うには、関数unload-feature
を使用します:
このコマンドはフィーチャfeatureをプロバイドしていたライブラリーをアンロードします。そのライブラリー内のdefun
、defalias
、defsubst
、defmacro
、defconst
、defvar
、defcustom
により定義されたすべての関数、マクロ、変数は未定義になります。その後、それらのシンボルにたいして事前に関連付けられていたオートロードをリストアします。(ロードはシンボルのautoload
プロパティにこれらを保存しています。)
以前の定義をリストアする前に、特定のフックからそのライブラリー内の関数を取り除くために、unload-feature
はremove-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に含まれる場合、aはbに依存します。)オプション引数forceが非nil
の場合、依存関係は無視され、どのようなライブラリーもアンロードできます。
unload-feature
関数はLispで記述されており、その動作は変数load-history
にもとづきます。
この変数には、ライブラリー内で定義された関数を取り除くために、ライブラリーをアンロードする前にスキャンされるフックのリストが保持されています。