В чем разница между использованием XS и модуля Inline::C? Об этом кто-то упомянул в этом вопросе, и мне стало любопытно.
Perl XS и Inline::C
Ответы (2)
Inline::C генерирует XS и строит сгенерированный модуль. Он делает это во время выполнения, хотя и кэширует прошлые сборки.
Inline::C, возможно, проще в использовании, но есть несколько недостатков. При первом запуске он замедляет запуск, требует разрешений для создания файлов во время выполнения и требует инструментов для компиляции модуля. Кроме того, это усложняет установку для системного администратора.
Положительным моментом является то, что вы можете получить сгенерированный XS и исключить Inline::C, как только все начнет складываться. Это делает его полезным для прототипирования.
Inline компилирует код C одновременно с компиляцией вашего Perl и будет перекомпилировать каждый раз, когда ваш исходный код изменяется. XS компилируется один раз, а двоичный файл сохраняется как файл .so, как библиотека.
Perl написан на C, поэтому XS использует собственные типы Perl и механизмы подпрограмм. Модуль, использующий XS, работает почти так же эффективно, как встроенная функция языка. Некоторые вещи в Inline выполнять сложнее, и при вызове или возврате из вашего кода будет этап преобразования. При этом Inline хорошо справляется с тем, что не выполняет перекомпиляцию, когда в этом нет необходимости, а преобразования во встроенный код и из него вряд ли окажут заметное влияние на производительность.
Наконец, написание XS предполагает, что вы упаковываете модуль. Требуется много настроек и знаний Perl и упаковки модулей. Если вам просто нужно вызвать библиотеку C из Perl, вам лучше использовать Inline.