Функции нативной компиляции
Нативная компиляция реализована как побочный эффект байткодовой компиляции (см. Байткодовая компиляция). Таким образом, компиляция кода Lisp в нативный код всегда также производит его байткодовый код, и поэтому все правила и замечания по подготовке кода Lisp к байткодовой компиляции (см. Функции компиляции) также действительны для нативной компиляции.
Вы можете нативно скомпилировать либо определение одной функции или макроса, либо весь файл кода Lisp с помощью функции native-compile. Нативная компиляция файла создаст соответствующий файл .elc с байткодом и файл .eln с нативным кодом.
Нативная компиляция может генерировать предупреждения или сообщения об ошибках; они обычно записываются в буфер, называемый *Native-compile-Log*. В интерактивных сеансах используется специальный режим LIMPLE (native-comp-limple-mode), который настраивает font-lock соответствующим образом для этого журнала и в остальном идентичен режиму Fundamental. Ведение журнала сообщений, возникающих в результате нативной компиляции, можно контролировать с помощью переменной native-comp-verbose (см. Переменные нативной компиляции).
Когда Emacs запускается в неинтерактивном режиме, сообщения, созданные нативной компиляцией, сообщаются путем вызова message (см. Отображение сообщений), и обычно отображаются в потоке стандартной ошибки терминала, из которого был вызван Emacs.
- Функция: native-compile function-or-file &optional output
-
Эта функция компилирует function-or-file в нативный код. Аргумент function-or-file может быть символом функции, формой Lisp или именем (строкой) файла, содержащего исходный код Emacs Lisp, который необходимо скомпилировать. Если задан необязательный аргумент output, он должен быть строкой, указывающей имя файла, в который необходимо записать скомпилированный код. В противном случае, если function-or-file является функцией или формой Lisp, эта функция возвращает скомпилированный объект, а если function-or-file — именем файла, функция возвращает полное абсолютное имя файла, созданного для скомпилированного кода. Файл вывода по умолчанию получает расширение .eln.
Эта функция выполняет заключительную фазу нативной компиляции, которая вызывает GCC через libgccjit в отдельном подпроцессе, который вызывает тот же исполняемый файл Emacs, что и процесс, вызвавший эту функцию.
- Функция: batch-native-compile &optional for-tarball
Эта функция выполняет нативную компиляцию файлов, указанных в командной строке Emacs в пакетном режиме. Она должна использоваться только в пакетном режиме выполнения Emacs, поскольку она завершает Emacs по завершении компиляции. Если один или несколько файлов не компилируются успешно, процесс Emacs попытается скомпилировать все остальные файлы и завершится с ненулевым кодом возврата. Необязательный аргумент for-tarball, если он не
nil, сообщает функции поместить полученные файлы .eln в последнюю указанную директорию вnative-comp-eln-load-path(см. Поиск библиотек); это должно использоваться при создании архива исходного кода Emacs впервые, когда нативно скомпилированные файлы, отсутствующие в исходном архиве, должны быть сгенерированы в дереве сборки, а не в кэше пользователя.
Нативная компиляция может выполняться полностью асинхронно в подпроцессе основного процесса Emacs. Это позволяет главному процессу Emacs свободно работать, в то время как компиляция выполняется в фоновом режиме. Этот метод используется Emacs для нативной компиляции любого файла Lisp или байткодового файла Lisp, который загружается в Emacs, если для него недоступен нативно скомпилированный файл. Обратите внимание, что из-за использования подпроцесса нативная компиляция может выдавать предупреждения и ошибки, которые не возникают при байткодовой компиляции, и код Lisp может потребовать модификаций для корректной работы. См. native-comp-async-report-warnings-errors в разделе Переменные нативной компиляции для получения дополнительных сведений.
- Функция: native-compile-async files &optional recursively load selector
-
Эта функция асинхронно компилирует указанные files. Аргумент files должен быть именем одного файла (строка) или списком одного или нескольких имен файлов и/или каталогов. Если в списке присутствуют каталоги, необязательный аргумент recursively должен быть отличным от
nil, чтобы вызвать рекурсивную компиляцию в эти каталоги. Если load отличается отnil, Emacs загрузит каждый файл, который он успешно скомпилировал. Необязательный аргумент selector позволяет управлять тем, какие из files будут скомпилированы; он может иметь следующие значения:-
nilили опущено Выбирает все файлы и каталоги в files.
- строка регулярного выражения
Выбирает файлы и каталоги, имена которых соответствуют регулярному выражению.
- функция
Функция-предикат, которая будет вызываться для каждого файла и каталога в files и должна возвращать значение, отличное от
nil, если файл или каталог должны быть выбраны для компиляции.
На системах с несколькими процессорными ядрами, когда files содержит имена более одного файла, эта функция обычно запускает несколько подпроцессов компиляции параллельно под управлением
native-comp-async-jobs-number(см. Переменные нативной компиляции). -
Следующая функция позволяет программам Lisp проверять доступность нативной компиляции во время выполнения.
- Функция: native-comp-available-p
Эта функция возвращает значение, отличное от
nil, если в запущенном процессе Emacs включена поддержка нативной компиляции. На системах, которые динамически загружают libgccjit, она также проверяет наличие библиотеки и возможность ее загрузки. Программы Lisp, которым необходимо узнать, доступна ли нативная компиляция заранее, должны использовать этот предикат.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Native_002dCompilation-Functions.html