Perl XS и Inline :: C - PullRequest
       32

Perl XS и Inline :: C

12 голосов
/ 30 июля 2011

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

Ответы [ 2 ]

13 голосов
/ 30 июля 2011

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

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

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

2 голосов
/ 30 июля 2011

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

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

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

...