Spec-Zone.ru › Elisp

Динамические модули Emacs

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

Функции, которые загружают пакеты Emacs Lisp, также могут загружать динамические модули. Они распознают динамические модули по расширению имени файла, или «суффиксу». Этот суффикс зависит от платформы.

Переменная: module-file-suffix

Эта переменная содержит зависящее от системы значение расширения имени файла модульных файлов. Его значение равно .so на системах POSIX, .dylib на macOS и .dll на MS-Windows.

На macOS динамические модули также могут иметь суффикс .so в дополнение к .dylib.

Каждый динамический модуль должен экспортировать вызываемую функцию C, названную emacs_module_init, которую Emacs будет вызывать в рамках вызова load или require, которые загружают модуль. Он также должен экспортировать символ, названный plugin_is_GPL_compatible, чтобы указать, что его код выпущен под лицензией GPL или совместимой лицензией; Emacs будет сигнализировать об ошибке, если ваша программа попытается загрузить модули, которые не экспортируют такой символ.

Если модулю необходимо вызвать функции Emacs, он должен сделать это через API (интерфейс прикладного программирования), определённый и документированный в заголовочном файле emacs-module.h, который входит в дистрибутив Emacs. Подробности использования этого API при написании собственных модулей см. в разделе Написание динамических модулей.

Модули могут создавать user-ptr объекты Lisp, которые содержат указатели на структуры C, определённые модулем. Это полезно для хранения сложных структур данных, созданных модулем, чтобы передать их обратно функциям модуля. Объекты user-ptr также могут иметь связанные _финализаторы_ — функции, которые выполняются при GC объекта; это полезно для освобождения ресурсов, выделенных для базовой структуры данных, таких как память, открытые дескрипторы файлов и т. д. См. Значения модулей.

Функция: user-ptrp объект

Эта функция возвращает t, если её аргумент является объектом user-ptr.

Функция: module-load файл

Emacs вызывает эту низкоуровневую примитивную функцию для загрузки модуля из указанного файла файл и выполнения необходимой инициализации модуля. Это примитив, который гарантирует, что модуль экспортирует символ plugin_is_GPL_compatible, вызывает функцию emacs_module_init модуля и сигнализирует об ошибке, если эта функция возвращает индикатор ошибки или если пользователь нажал C-g во время инициализации. Если инициализация выполнена успешно, module-load возвращает t. Обратите внимание, что файл должен уже иметь правильное расширение имени файла, так как эта функция не пытается искать файлы с известными расширениями, в отличие от load.

В отличие от load, module-load не записывает модуль в load-history, не выводит никаких сообщений и не защищает от рекурсивных загрузок. Поэтому большинство пользователей должны использовать load, load-file, load-library, или require вместо module-load.

Загружаемые модули в Emacs активируются с помощью опции --with-modules на этапе конфигурации.


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/Dynamic-Modules.html

Spec-Zone.ru

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