Подтвердить что ты не робот

Perl XS и Inline:: C

Какая разница между использованием XS и модулем Inline:: C? Это было упомянуто кем-то в этом вопросе и вызвало у меня любопытство.

4b9b3361

Ответ 1

Inline:: C генерирует XS и создает сгенерированный модуль. Он делает это во время выполнения, хотя он кэширует прошлые сборки.

Inline:: C, возможно, проще в использовании, но есть несколько недостатков. При первом запуске он замедляет запуск, он требует разрешений для создания файлов во время выполнения, и для этого требуется, чтобы инструменты компилировали модуль. Кроме того, это затрудняет установку sysadmin.

Потенциал роста заключается в том, что вы можете захватить сгенерированный XS и устранить Inline:: C, как только вещи начнут складываться. Это делает его полезным для прототипирования.

Ответ 2

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

Perl написан на C, поэтому XS использует собственные типы Perl и механизмы подпрограммы. Модуль с использованием XS работает почти так же эффективно, как и встроенная функция языка. Сложнее сделать что-то в Inline, и при вызове или возврате из вашего кода будет шаг преобразования. Это говорит о том, что Inline делает хорошую работу, не перекомпилируя, когда это не необходимо, и конверсии в и из Inline-кода вряд ли будут заметными.

Наконец, запись XS предполагает, что вы упаковываете модуль. Существует множество настроек и знаний в области Perl-кишок и модульной упаковки. Если вам просто нужно вызвать библиотеку C из Perl, вам лучше использовать Inline.