Perl XS и Inline:: C

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

2 ответов


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

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

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


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

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

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