Spec-Zone.ru › Elisp

Сборка Emacs

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

Для сборки Emacs требуется GNU Make версии 3.81 или более поздней.

Компиляция исходных файлов C в каталоге src создаёт исполняемый файл с именем temacs, также называемый чистым неупорядоченным Emacs. Он содержит интерпретатор Emacs Lisp и процедуры ввода-вывода, но не команды редактирования.

Команда temacs -l loadup запустила бы temacs и указала бы ему загрузить loadup.el. Библиотека loadup загружает дополнительные библиотеки Lisp, которые настраивают обычную среду редактирования Emacs. После этого шага исполняемый файл Emacs больше не является чистым.

Поскольку загрузка стандартных файлов Lisp занимает некоторое время, пользователи обычно не запускают исполняемый файл temacs напрямую. Вместо этого на одном из последних этапов сборки Emacs выполняется команда ‘temacs -batch -l loadup --temacs=dump-method’. Специальный параметр --temacs указывает temacs, как записать все стандартные предварительно загруженные функции и переменные Lisp, чтобы при последующем запуске Emacs запускался гораздо быстрее. Параметру --temacs требуется аргумент dump-method, который может принимать одно из следующих значений:

‘pdump’

Записать предварительно загруженные данные Lisp в файл дампа. При использовании этого метода создаётся дополнительный файл данных, который Emacs загружает при запуске. Созданный файл дампа обычно называется emacs.pdmp и устанавливается в exec-directory Emacs (см. Функции справки). Этот метод предпочтителен, поскольку он не требует от Emacs применения специальных методов выделения памяти, которые могут мешать различным методам размещения памяти, используемым современными системами для повышения безопасности и конфиденциальности.

‘pbootstrap’

Как и ‘pdump’, но используется при начальной загрузке Emacs, когда предыдущий двоичный файл Emacs и байт-компилированные файлы Lisp *.elc недоступны. В этом случае созданный файл дампа обычно называется bootstrap-emacs.pdmp.

Установливается дампированный исполняемый файл emacs (также называемый чистым Emacs). Если для сборки Emacs использовался переносимый дампер, исполняемый файл emacs фактически является точной копией temacs, и соответствующий файл emacs.pdmp также устанавливается. Переменная preloaded-file-list содержит список предварительно загруженных файлов Lisp, записанных в файле дампа или в дампированном исполняемом файле Emacs. Если вы переносите Emacs на новую операционную систему и не можете реализовать дампирование ни одним из способов, Emacs должен загружать loadup.el при каждом запуске.

По умолчанию дампированный исполняемый файл emacs записывает такие сведения, как время сборки и имя хоста. Используйте параметр --disable-build-details для configure, чтобы не записывать эти сведения. В таком случае повторная сборка и установка Emacs из тех же исходных файлов с большей вероятностью приведёт к созданию идентичных копий Emacs.

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

После того как loadup.el прочитает site-load.el, он находит строки документации для примитивных и предварительно загруженных функций (и переменных) в файле etc/DOC, где они хранятся, вызывая Snarf-documentation (см. Доступ к документации).

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

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

  • Настроить сканирование этих файлов при создании файла etc/DOC и загрузить их с помощью site-load.el.
  • Загрузить файлы с помощью site-init.el, а затем скопировать их в каталог установки файлов Lisp при установке Emacs.
  • Указать значение nil для byte-compile-dynamic-docstrings в качестве локальной переменной в каждом из этих файлов и загрузить их с помощью site-load.el или site-init.el. (Недостаток этого способа в том, что строки документации постоянно занимают место в Emacs.)

Не рекомендуется помещать в site-load.el или site-init.el что-либо, что изменяет функции, ожидаемые пользователями от обычного неизменённого Emacs. Если вы считаете необходимым переопределить стандартные функции для своего сайта, сделайте это с помощью default.el, чтобы пользователи при желании могли отменить ваши изменения. См. Сводка: последовательность действий при запуске. Обратите внимание, что если site-load.el или site-init.el изменяет load-path, эти изменения будут потеряны после дампирования. См. Поиск библиотек. Чтобы внести постоянное изменение в load-path, используйте параметр --enable-locallisppath для configure.

В пакете, который можно предварительно загрузить, иногда необходимо (или полезно) отложить выполнение некоторых вычислений до последующего запуска Emacs. Подавляющее большинство таких случаев связано со значениями настраиваемых переменных. Например, tutorial-directory — это переменная, определённая в startup.el, который загружается предварительно. Значение по умолчанию задаётся на основе data-directory. Переменной требуется получить значение data-directory при запуске Emacs, а не во время его дампирования, поскольку исполняемый файл Emacs, вероятно, был установлен в другом месте после создания дампа.

Функция: custom-initialize-delay symbol value

Эта функция откладывает инициализацию symbol до следующего запуска Emacs. Обычно эту функцию используют, указывая её в качестве свойства :initialize настраиваемой переменной. (Аргумент value не используется и предоставлен только для совместимости с формой, которую ожидает Custom.)

В маловероятном случае, если вам потребуется функциональность более общего назначения, чем предоставляет custom-initialize-delay, вы можете использовать before-init-hook (см. Сводка: последовательность действий при запуске).

Функция: dump-emacs-portable to-file &optional track-referrers

Эта функция сохраняет текущее состояние Emacs в файл дампа to-file, используя метод pdump. Обычно файл дампа называется emacs-name.dmp, где emacs-name — имя исполняемого файла Emacs. Необязательный аргумент track-referrers, если он не равен nil, заставляет переносимый дампер сохранять дополнительные сведения, помогающие установить происхождение типов объектов, которые пока не поддерживаются методом pdump.

Хотя код переносимого дампера может выполняться на многих платформах, создаваемые им файлы дампа непереносимы — загрузить их может только исполняемый файл Emacs, создавший этот дамп.

Чтобы использовать эту функцию в Emacs, который уже был дампирован, необходимо запустить Emacs с параметром ‘-batch’.

Если вы включаете файлы ‘.el’ в дампированный Emacs и такой файл ‘.el’ содержит код, обычно выполняемый при загрузке, этот код не будет выполняться при запуске Emacs после дампирования. Чтобы обойти эту проблему, можно добавить функции в хук after-pdump-load-hook. Этот хук выполняется при запуске Emacs.

Функция: pdumper-stats

Если текущее сеанс Emacs восстановило состояние из файла дампа, эта функция возвращает сведения о файле дампа и времени, затраченном на восстановление состояния Emacs. Значение представляет собой alist ((dumped-with-pdumper . t) (load-time . time) (dump-file-name . file)), где file — имя файла дампа, а time — время в секундах, затраченное на восстановление состояния из файла дампа. Если текущее сеанс не было восстановлено из файла дампа, значение равно nil.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Building-Emacs.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API