Jump to content

XS (Перл)

XS — это Perl интерфейс внешней функции , через который программа может вызывать C или C++ подпрограмму . XS или xsub — это аббревиатура от «расширяемая подпрограмма».

XS также относится к связующему языку для указания вызывающих интерфейсов, поддерживающих такие интерфейсы (см. ниже).

Библиотеки подпрограмм в Perl называются модулями , а модули, содержащие xsub, называются модулями XS . Perl предоставляет основу для разработки, упаковки, распространения и установки модулей.

Может оказаться желательным, чтобы программа Perl вызывала подпрограмму C для выполнения задач, требующих интенсивного использования процессора или памяти , для взаимодействия с аппаратным обеспечением или низкоуровневыми системными средствами или для использования существующих библиотек подпрограмм C.

Perl-интерпретатор

[ редактировать ]

Интерпретатор Perl — это программа на языке C, поэтому в принципе нет препятствий для вызова с Perl на C. Однако интерфейс XS сложен. [ почему? ] и очень технический, и его использование требует некоторого понимания интерпретатора. Самым ранним упоминанием на эту тему был Perlguts POD .

Можно писать модули XS, которые обертывают код C++ . В основном это вопрос настройки системы сборки модулей . [1]

Пример кода

[ редактировать ]

Ниже показан модуль XS, предоставляющий функцию. concat() для объединения двух строк (т. е. эквивалент Perl . оператор).

#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

SV* _do_sv_catsv (pTHX_ SV* one_sv, SV* two_sv ) {
    SV* one_copy = newSVsv(one_sv);
    sv_catsv(one_copy, two_sv);
    return one_copy;
}
MODULE = Demo::XSModule      PACKAGE = Demo::XSModule

SV*
concat (SV* one_sv, SV* two_sv)
    CODE:
        SV* to_return = _do_sv_catsv( aTHX_ one_sv, two_sv );
        RETVAL = to_return;

    OUTPUT:
        RETVAL

Первые четыре строки ( #define и #include операторы) являются стандартным шаблоном.

После этого следует любое количество простых функций C, которые можно вызывать локально.

Раздел, который начинается с MODULE = Demo::XSModule определяет интерфейс Perl для этого кода, используя реальный язык макросов XS. Обратите внимание, что код C под CODE: раздел называет _do_sv_catsv() функция pure-C, определенная в предыдущем разделе.

Документация Perl объясняет значение и назначение всех «специальных» символов (например, aTHX_ и RETVAL), показано выше.

Чтобы сделать этот модуль доступным для Perl, его необходимо скомпилировать. Инструменты сборки, такие как ExtUtils::MakeMaker, могут делать это автоматически. (Для сборки вручную: инструмент xsubpp анализирует модуль XS и выводит исходный код C; затем этот исходный код компилируется в общую библиотеку и помещается в каталог, где Perl может его найти.) Затем код Perl использует модуль, такой как XSLoader, для загрузки скомпилированный модуль XS. В этот момент Perl может вызвать Demo::XSModule::concat('foo', 'bar') и получить обратно строку foobar, как будто concat() сами были написаны на Perl.

Обратите внимание, что для создания интерфейсов Perl к уже существующим библиотекам C, h2xs [ нужны дальнейшие объяснения ] может автоматизировать большую часть создания самого файла XS.

Трудности

[ редактировать ]

Создание и поддержка модулей XS требует знаний как самого C, так и обширного C API Perl. Модули XS можно устанавливать только в том случае, если компилятор C и файлы заголовков доступны , с которыми был скомпилирован интерпретатор Perl. Кроме того, новые версии Perl могут нарушить двоичную совместимость , требующую перекомпиляции модулей XS.

См. также

[ редактировать ]
  • SWIG — альтернатива XS, которая также поддерживает вызов функций C и C++ из нескольких других языков.
  • FFI — механизм, позволяющий вызывать процедуры, написанные на другом языке.
  1. ^ «Склеивание C++ и Perl вместе» . johnkeiser.com. 27 августа 2001 года. Архивировано из оригинала 11 декабря 2001 года . Проверено 5 мая 2005 г.
[ редактировать ]
  • perlxs Интерфейс прикладного программирования Perl XS
  • perlxstut Учебное пособие по Perl XS
  • perlguts Внутренние функции Perl для тех, кто занимается расширениями
  • perlapi Список API Perl (создается автоматически)
  • по XS-механике Учебное пособие
  • Perl и C++ создают модули XS для C++
  • xs-fun XS — это весело: простой и легкий урок по написанию Perl XS
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: aec83909465bec9c5488da9a191656a7__1695877260
URL1:https://arc.ask3.ru/arc/aa/ae/a7/aec83909465bec9c5488da9a191656a7.html
Заголовок, (Title) документа по адресу, URL1:
XS (Perl) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)