13.13 Объявление устаревших функций

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

Самый простой способ пометить функцию как устаревшую — это поместить форму (declare (obsolete …)) в определение функции с помощью defun. См. Форма declare. Альтернативно, вы можете использовать функцию make-obsolete, описанную ниже.

Макрос (см. Макросы) также может быть помечен как устаревший с помощью make-obsolete; это имеет те же эффекты, что и для функции. Псевдоним для функции или макроса также может быть помечен как устаревший; это делает сам псевдоним устаревшим, а не функцию или макрос, на который он ссылается.

Функция: make-obsolete obsolete-name current-name when

Эта функция помечает obsolete-name как устаревший. obsolete-name должен быть символом, называющим функцию или макрос, или псевдоним для функции или макроса.

Если current-name — это символ, предупреждение гласит, что следует использовать current-name вместо obsolete-name. current-name не обязательно должен быть псевдонимом для obsolete-name; это может быть другая функция с аналогичной функциональностью. current-name также может быть строкой, которая служит сообщением предупреждения. Сообщение должно начинаться с строчной буквы и заканчиваться точкой. Оно также может быть nil, в случае которого сообщение предупреждения не содержит дополнительной информации.

Аргумент when должен быть строкой, указывающей, когда функция была впервые объявлена устаревшей — например, дата или номер выпуска.

Макрос: define-obsolete-function-alias obsolete-name current-name when &optional doc

Этот удобный макрос помечает функцию obsolete-name как устаревшую и также определяет ее как псевдоним для функции current-name. Это эквивалентно следующему:

(defalias obsolete-name current-name doc)
(make-obsolete obsolete-name current-name when)

Кроме того, вы можете пометить определенную соглашение вызова для функции как устаревшее:

Функция: set-advertised-calling-convention function signature when

Эта функция указывает список аргументов signature как правильный способ вызова function. Это заставляет байт-компилятор Emacs выдавать предупреждение всякий раз, когда он натыкается на программу Emacs Lisp, которая вызывает function каким-либо другим способом (хотя он все же позволит байт-компиляции кода). when должен быть строкой, указывающей, когда переменная была впервые объявлена устаревшей (обычно строкой номера версии).

Например, в старых версиях Emacs функция sit-for принимала три аргумента, как это:

  (sit-for seconds milliseconds nodisp)

В переходный период функция принимала эти три аргумента, но объявляла это старое соглашение вызова устаревшим следующим образом:

(set-advertised-calling-convention
  'sit-for '(seconds &optional nodisp) "22.1")

Альтернативой использованию этой функции является advertised-calling-convention declare спецификация, см. Форма declare.