16.9 Выгрузка

Вы можете отбрасывать функции и переменные, загруженные библиотекой, чтобы освободить память для других объектов Lisp. Для этого используйте функцию unload-feature:

Команда: unload-feature feature &optional force

Эта команда выгружает библиотеку, предоставившую функцию feature. Она отменяет определение всех функций, макросов и переменных, определенных в этой библиотеке с помощью defun, defalias, defsubst, defmacro, defconst, defvar и defcustom. Затем она восстанавливает любые автозагрузки, ранее связанные с этими символами. (Загрузка сохраняет их в свойстве function-history символа.)

Перед восстановлением предыдущих определений 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 отказывается выгружать библиотеку, от которой зависят другие загруженные библиотеки. (Библиотека a зависит от библиотеки b, если a содержит require для b.) Если необязательный аргумент force не равен nil, зависимости игнорируются, и вы можете выгрузить любую библиотеку.

Функция unload-feature написана на Lisp; ее действия основаны на переменной load-history.

Переменная: unload-feature-special-hooks

Эта переменная содержит список хуков, которые будут просканированы перед выгрузкой библиотеки, чтобы удалить функции, определенные в библиотеке.