17.3 Строки документации и компиляция

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

У этой возможности есть недостаток: если вы удалите, переместите или измените скомпилированный файл (например, скомпилировав новую версию), Emacs может больше не иметь доступа к строке документации ранее загруженных функций или переменных. Такая проблема обычно возникает только если вы собираете Emacs самостоятельно и случайно редактируете и/или перекомпилируете исходные файлы Lisp. Чтобы решить её, просто перезагрузите каждый файл после перекомпиляции.

Динамическая загрузка строк документации из байт-скомпилированных файлов определяется во время компиляции для каждого байт-скомпилированного файла. Её можно отключить с помощью опции byte-compile-dynamic-docstrings.

Пользовательская опция: byte-compile-dynamic-docstrings

Если это значение не nil, байт-компилятор генерирует скомпилированные файлы, настроенные для динамической загрузки строк документации.

Чтобы отключить возможность динамической загрузки для конкретного файла, установите эту опцию в nil в его строке заголовка (см. Локальные переменные в файлах в Руководстве GNU Emacs), например:

-*-byte-compile-dynamic-docstrings: nil;-*-

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

Внутренне динамическая загрузка строк документации реализуется путём записи скомпилированных файлов со специальной конструкцией ридера Lisp: ‘#@count’. Эта конструкция пропускает следующие count символов. Также используется конструкция ‘#$’, которая обозначает имя этого файла в виде строки. Не используйте эти конструкции в исходных файлах Lisp; они не предназначены для понятного восприятия человеком при чтении файла.